0

我正在尝试显示存储在我的数据库中的记录,这是我在 PHP 上的代码:

<?php
include("includes/connect.php");
$user_id = $_GET['user_id'];
$recipe_id = $_GET['recipe_id'];

$sql_check = "select * from user_favorites where user_id = '$user_id' and recipe_id = '$recipe_id'";
$query_check = mysql_query($sql_check);

$result_array = array();
while ($row = mysql_fetch_assoc($query_check)) {
$user_id = $row["user_id"];
$recipe_id = $row["recipe_id"];

$result_array[]= array("user_id"=> $user_id, "recipe_id"=> $recipe_id);
$json_encoded = json_encode($result_array);
echo "addToCallback(". $json_encoded.")";
}
?>

输出:addToCallback([{"user_id":"0","re​​cipe_id":"0"}])

在我的数据库表上,我已经有一个存储记录,但为什么它只显示 0?我的桌子上没有“0”输入。我的代码有问题吗?

谢谢!

4

3 回答 3

0

您的代码有 3 个问题:

  1. 您没有正确格式化查询部分
  2. 您没有检查可能的错误
  3. 很可能您编码错误的数组

第 2 项是必不可少的。您总是需要被告知所有发生的错误 - 这样您就可以采取适当的措施并解决问题。
没有错误信息,你就是瞎子和聋子。

所以,这里有一个改进的版本。
它将返回编码数据或 mysql 错误(如果您打开了 display_errors。否则错误将记录在 web-servers error_log 中)。
如果既没有数据也没有错误消息 - 您的查询没有返回任何行。

<?php
error_reporting(E_ALL);
include("includes/connect.php");
$user_id   = mysql_real_escape_string($_GET['user_id']);
$recipe_id = mysql_real_escape_string($_GET['recipe_id']);

$sql = "select * from user_favorites where user_id = '$user_id' and recipe_id = '$recipe_id'";
$res = mysql_query($sql) or trigger_error(mysql_error()."[$sql]");

$data = array();
while ($row = mysql_fetch_assoc($res)) {
    $data[] = $row;
}
$json_encoded = json_encode($result_array);
echo "addToCallback(". $json_encoded.")";
于 2013-02-25T09:54:25.930 回答
0
  1. 确保您获得所有 GET 值

  2. 改变 :

$sql_check = "select * from user_favorites where user_id = '$user_id' and recipe_id = '$recipe_id'";

至 :

$sql_check = "select * from user_favorites where user_id = '".mysql_real_escape_string($user_id)."' and recipe_id = '".mysql_real_escape_string($recipe_id)."'";

echo $sql_check并在 phpmyadmin 中运行并查看输出

于 2013-02-25T09:54:41.703 回答
0

我刚刚测试了您的代码并拨打了现有电话

test.php?user_id=1&recipe_id=5

addToCallback([{"user_id":"1","re​​cipe_id":"5"}])

不存在的电话没有给我任何回报:]

于 2013-02-25T10:08:38.363 回答