Php 未知列';比率"u检验"x27;在';其中第'条;
我有下面的mysqli命令,它给出了错误消息 “where子句”中的未知列“rates\u test”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
$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();