Php 未知列';比率"u检验"x27;在';其中第'条;

Php 未知列';比率"u检验"x27;在';其中第'条;,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我有下面的mysqli命令,它给出了错误消息 “where子句”中的未知列“rates\u test” $id是另一个查询返回的数字 $assigntable是传递给上述查询所在函数的字符串,但基本上是 $assigntable = array_search('Assign', $_POST); 因此将有值rates\u test 我无法找出查询的语法有什么问题,如果我将其更改为 $result1 = mysqli_query($con,"UPDATE Custom_Rates SET Us

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

“where子句”中的未知列“rates\u test”

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

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

$assigntable = array_search('Assign', $_POST); 
因此将有值
rates\u test

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

$result1 = mysqli_query($con,"UPDATE Custom_Rates SET UserID=$id WHERE TableName ='$assigntable'"); 
这是我尝试过的事情之一,我明白了

“字段列表”中的未知列“数组”

输出

更新自定义\u速率集UserID=Array,其中TableName=Rates\u test

输出

更新自定义\u速率集UserID=数组,其中TableName='Rates\u test'


如果您确定在
$assigntable
变量中有
rates\u test
,则更改:

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


您应该使用某种方法来防止SQL注入。您的第二次尝试将起作用,但$id的值似乎不是您所认为的值

尝试回显查询,如下所示:

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

看看你得到了什么。

从你的输出中,这是非常明显的

更新自定义\u速率集UserID=数组,其中TableName='Rates\u test'

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

这就是你的问题。使用
var\u dump($id)
print\r($id)
找出实数的位置,然后参考它(例如
$id[“number”]
)。

您的案例清楚地说明了为什么应该使用准备好的语句 而不是直接将值填充到查询中

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

必须是。

将查询放入字符串中。然后在变量替换后打印出字符串。99%的情况下,当您正确调试它时,问题是显而易见的。仅仅因为您已将
mysql\uu
更改为
mysqli\u
,它无法修复安全性。您仍在向SQL中注入变量,这意味着您非常容易受到攻击。向我们展示$id是如何形成的。是的,看起来$id实际上是“数组”而不是数字,是的,我知道我需要阻止SQL注入,但我想先让它工作,所以请更正为$id分配值的内容,然后您就可以让它工作了。我建议转到准备好的声明。这会让你的生活更轻松,并防止注射。是的,我现在明白了,Id不是我所想的,并且修复了它,谢谢you@ZacPowell我怀疑你真的修好了that@YourCommonSense解释
$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 . "'");
echo "UPDATE Custom_Rates SET UserID=$id WHERE TableName ='$assigntable'"
$stmt = mysqli_prepare($con,"UPDATE Custom_Rates SET UserID=? WHERE TableName=?"); 
$stmt->bindParam("ss",$id, $assigntable);
$stmt->execute();