-2

我有下面的 mysqli 命令,它给出了错误消息

“where 子句”中的未知列“rates_test”

$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

4 回答 4

0

从你的输出中很明显

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

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

所以有你的问题。使用var_dump($id)orprint_r($id)找出实数在哪里,然后参考它(例如$id["number"])。

于 2013-08-29T11:21:16.070 回答
0

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

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

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

它必须是。

于 2013-08-29T11:28:47.313 回答
-1

您应该使用一些东西来防止 SQL 注入。您的第二次尝试将起作用,但 $id 的值似乎不是您认为的那样!

尝试这样回显查询:

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

看看你得到了什么。

于 2013-08-29T11:19:44.157 回答
-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 . "'");
于 2013-08-29T11:15:14.760 回答