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);
?>
3 Réponses :
N'utilisez pas de citation autour du nom de la colonne et utilisez une conversion appropriée pour la date de chaîne
Vous voudrez peut-être modifier votre code de concours similaire ; -) code> C devis ordre
Dans votre requête que vous utilisez: p>
J'aime = '% shop%' p> blockQuote>
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. P>
Vous pouvez obtenir plus d'informations sur Sprintf sur: https://www.php.net/manual/fr/function.sprintf. php p>
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 ..
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);
?>
Vérifiez les journaux des erreurs.
Probablement pas le problème, mais vous avez
'région' code> avec des guillemets, ce sera donc une chaîne, pas la colonnerégion code>.Si vous stockez la date comme une date code> Date code> ou
DateTime code> dans la base de données, votre format est faux; MySQL utiliseaaaay-mm-dd code> formatLe 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 code> de type varchar / un type de texte ou de typedate code>?@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.