0
votes

Pourquoi utilise-t-on comme% Valeur% donnant à ma page PHP un code 500?

J'ai fait de mon mieux pour Google cette question et je pense que je fais peut-être quelque chose de mal que je ne comprends pas? J'ai une petite page PHP qui génère des JSON pour moi à partir d'une base de données destinée à être utilisée dans un autre système.

Cela fonctionne parfaitement jusqu'à ce que j'essaie d'utiliser comme dans mon énoncé SQL avec la carte% sauvage. La même requête fonctionne parfaitement dans la phpmyadmin. Je suis un peu confus. P>

Mes données ressemblent à ceci. P>

Boutique, région, mangues, ventes, plus de données. P>

J'essaie de filtrer par région. La région a actuellement quatre valeurs. Appelons-les "Ma boutique", "Shop Shop", "Franchise" et "Spécial" P>

Je veux pouvoir éventuellement faire une URL comme Data.php? ShopType = magasins. Cela mènerait ma requête et ma filtration pour toutes les régions avec "Shop" dans la région P>

facile que je pensais. J'ai construit une requête de test rapide. P>

<?php
//setting header to json
header('Content-Type: application/json');

$servername = "server";
$username = "User";
$password = "password";
$dbname = "mangoes";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

//get the data range and type
//$ShopType = $_GET["ShopType"];

//query to get data from the table
$query = sprintf("SELECT * FROM `RetailSalesData` WHERE `Date` = '01/07/2019' AND 'Region' LIKE '%shop%'");

//execute query
$result = $conn->query($query);

//loop through the returned data
$data = array();
foreach ($result as $row) {
    $data[] = $row;
}

//free memory associated with result
$result->close();

//close connection
$conn->close();

//now print the data
print json_encode($data);
?>


8 commentaires

Vérifiez les journaux des erreurs.


Probablement pas le problème, mais vous avez 'région' avec des guillemets, ce sera donc une chaîne, pas la colonne région .


Si vous stockez la date comme une date Date ou DateTime dans la base de données, votre format est faux; MySQL utilise aaaay-mm-dd format


Le problème est Sprintf, il remplacera% avec des paramètres que vous n'en passez pas. Supprimer Sprintf et attribuer directement une requête en variable


Est date de type varchar / un type de texte ou de type date ?


@Ashok gadri vous mon ami est 100% correct. Supprimer Sprintf a résolu mon problème.


Si vous souhaitez utiliser la fonction Sprintf, vous pouvez échapper% avec un autre% par exemple '%% Shop %%'


Vous n'effectuez jamais la récupération. Vraiment, vous devez utiliser des déclarations préparées, de toute façon. Assurez-vous également que la connexion Mot de passe est sur une page sécurisée séparée. Juste des commentaires.


3 Réponses :


1
votes

N'utilisez pas de citation autour du nom de la colonne et utilisez une conversion appropriée pour la date de chaîne xxx


1 commentaires

Vous voudrez peut-être modifier votre code de concours similaire ; -) C devis ordre



4
votes

Dans votre requête que vous utilisez:

J'aime = '% shop%'

Cependant, vous passez que dans la fonction Sprintf, qui a un objectif particulier pour% s caractères. % s signifie que vous fournirez la fonction d'un argument de chaîne pour Sprintf pour mettre en place% s et que vous ne fournissez pas l'argument, il donne 500 erreurs.

Vous pouvez obtenir plus d'informations sur Sprintf sur: https://www.php.net/manual/fr/function.sprintf. php


2 commentaires

C'était 100% correct. Que vous beaucoup. @Ashok Gardi a également signalé ses commentaires.


@paranoidsystems utilise le code que j'ai mis à jour juste maintenant qui vous donnera les résultats ..



0
votes

sprintf a le problème et aussi vous passez à la section "région" comme chaîne .. Et on dirait que ceci est le nom de la colonne

Utilisez ce code. p>

<?php
//setting header to json
header('Content-Type: application/json');

$servername = "server";
$username = "User";
$password = "password";
$dbname = "mangoes";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

//get the data range and type
//$ShopType = $_GET["ShopType"];

//query to get data from the table
$query = "SELECT * FROM `RetailSalesData` WHERE `Date` = '15/07/2019' AND Region LIKE '%shop%'";

//execute query
$result = $conn->query($query);
$data1 = $result->fetch_all();
//loop through the returned data
$data = array();
foreach ($data1 as $row) {
    $data[] = $row;
}

//free memory associated with result
$result->close();

//close connection
$conn->close();

//now print the data
print json_encode($data);
?>


0 commentaires