SQL Query在PHP中不起作用,但在SQL中起作用

时间:2014-10-29 12:08:15

标签: php mysql sql-server

我一直在尝试使用特定查询将数据添加到表中。在PHPMyAdmin中,我一直在使用:

UPDATE member_food SET food_id ='5' WHERE member_id='5' AND food_type='breakfast'

这很有效,但是当我尝试在PHP中实现它时。它将food_id更改为1。

enter image description here

这是我的PHP代码:

$sql_breakfast1 = "UPDATE member_food SET food_id ='$breakfast1' WHERE member_id='$id'    AND food_type='breakfast'";
if ($mysqli->query($sql_breakfast1) === TRUE) {
echo "Query: " . $sql_breakfast1;
} else {
    echo "Query: " . $sql_breakfast1 . "<br> Error: " . $mysqli->error;
}

当我回显查询时,这是我的结果:

  

查询:UPDATE member_food SET food_id =&#39; 8&#39;在哪里member_id =&#39; 5&#39;和   food_type =&#39;早餐&#39;

为了确认我可以将数据发送到表中,如果我在没有AND部分的情况下执行此操作,则可以正常工作。所以这有效:

  

查询:UPDATE member_food SET food_id =&#39; 8&#39;在哪里member_id =&#39; 5&#39;

如何调试这种情况?解决这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

不要在查询中直接使用php变量。 准备和绑定变量

另请参阅服务器错误日志或在开发模式下设置错误信息,以便您直接在浏览器中看到任何通知或错误。

更新

不要在绑定参数中使用字符串。

尝试这样:

$sql_breakfast1 = "UPDATE member_food SET food_id =? WHERE member_id=?  AND food_type=?";
stmt = $mysqli->prepare($sql_breakfast1);


if ( false===$stmt ) {
  die($mysqli->error);
}
$sis = 'sis';
$strBreakFast = 'breakfast';
$rc = $stmt->bind_param($sis, $breakfast1, $id, $strBreakFast);

if ( false===$rc ) {
  die($stmt->error);
}

$rc = $stmt->execute();

if ( false===$rc ) {
  die($stmt->error);
}

$stmt->close()

答案 1 :(得分:1)

尝试:

$sql_breakfast1 = "UPDATE member_food SET food_id ="'.$breakfast1.'" WHERE member_id="'.$id.'" AND food_type="'breakfast'"";

使用单引号播放,尝试逐个删除每个变量,然后逐个breakfast