'where子句'中的未知列'rates_test'

时间:2013-08-29 11:12:58

标签: php mysql sql mysqli

我有以下mysqli命令,它给出了错误信息

  

未知栏' rates_test'在' where子句'

$result1 = mysqli_query($con,"UPDATE Custom_Rates SET UserID=$id WHERE TableName =" . $assigntable);

$id是另一个查询返回的数字

$assigntable是传递给上述查询所在函数的字符串,但基本上是

$assigntable = array_search('Assign', $_POST); 

因此将具有值rates_test

我无法弄清楚查询的语法有什么问题,如果我将其更改为

,甚至更奇怪
$result1 = mysqli_query($con,"UPDATE Custom_Rates SET UserID=$id WHERE TableName ='$assigntable'"); 

这是我尝试的事情之一,我得到了

  

未知列'数组'在'字段列表'

$string = "UPDATE Custom_Rates SET UserID=$id WHERE TableName =".$assigntable;

输出

  

UPDATE Custom_Rates SET UserID = Array WHERE TableName = rates_test

$string = "UPDATE Custom_Rates SET UserID=$id WHERE TableName ='" . $assigntable . "'";

输出

  

UPDATE Custom_Rates SET UserID = Array WHERE TableName =' rates_test'

4 个答案:

答案 0 :(得分:0)

从输出中可以看出这一点

  

UPDATE Custom_Rates SET UserID = Array WHERE TableName ='rates_test'

$id 另一个查询返回的数字

所以这是你的问题。使用var_dump($id)print_r($id)确定实数的位置,然后引用它(例如$id["number"])。

答案 1 :(得分:0)

您的案例是一个明确的例子,为什么您应该使用准备好的陈述

而不是将您的值直接填充到查询中。

$stmt = mysqli_prepare($con,"UPDATE Custom_Rates SET UserID=? WHERE TableName=?"); 
$stmt->bindParam("ss",$id, $assigntable);
$stmt->execute();

必须是。

答案 2 :(得分:-1)

您应该使用某些东西来阻止SQL注入。你的第二次尝试会起作用,但看起来$ id的值不是你想象的那样!

尝试回显查询:

echo "UPDATE Custom_Rates SET UserID=$id WHERE TableName ='$assigntable'"

看看你得到了什么。

答案 3 :(得分:-2)

如果您确定rates_test变量中有$assigntable,请更改:

$result1 = mysqli_query($con,"UPDATE Custom_Rates SET UserID=$id WHERE TableName =" . $assigntable);

要:

$result1 = mysqli_query($con,"UPDATE Custom_Rates SET UserID=$id WHERE TableName ='" . $assigntable . "'");