mysqli_query():( 42000/1064)当使用$ _POST UPDATE SET WHERE时

时间:2015-10-13 00:16:17

标签: php mysqli vbulletin

所以我有两个代码跟在一起:

$query ="SELECT field6 FROM userfield WHERE userid='".$vbulletin->userinfo['userid']."' AND field6 IS NOT NULL LIMIT 1";
if ($result=mysqli_query($link, $query)) {

     $row = mysqli_fetch_array($result);

      $API = $row['field6'];


}
if(empty($API)) {
      echo "You don't have any information in our database!";
      $table   = $_POST["userfield"];
         $query ="  UPDATE $table SET field6='".mysqli_real_escape_string($link,$_POST['token'])."' WHERE userid=".$vbulletin->userinfo['userid']."";
   mysqli_query($link, $query);

$ link和$ vbulletin代码工作正常,代码的完整第一部分也是如此。

但是如果field6确实为该用户为空(并且$ API返回空),则它开始运行第二个代码。它使用大多数相同的变量,但它不起作用。

它给出了回声,然后是错误:

  

您的数据库中没有任何信息!
      PHP警告:mysqli_query():( 42000/1064):您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在“SET field6 =''WHERE userid = 1'附近使用正确的语法

当我在现场进入测试时,转到:

'SET field6 = 'test' WHERE userid=1' at line 1 in

我知道代码非常混乱且不一致但我一直在努力改变小型员工。

1 个答案:

答案 0 :(得分:1)

$table没有任何价值,因此您的查询如下:

UPDATE SET field6 = 'test' WHERE userid=1

在查询中使用之前,您永远不会验证有效值,因此空值会破坏您的查询。因此,您也对SQL注入持开放态度。