MySQL查询出错了

时间:2015-11-27 09:26:38

标签: php mysql

你能说我在这个简单的查询中犯了哪些错误

 $q = "UPDATE users SET ".$aItemSlot." = '$seton' WHERE username='$us'"; 
    $r = @mysqli_query($dbc, $q); 
   $q = "UPDATE items SET item_position='3' WHERE it_id='$seton'"; 
   $r = @mysqli_query($dbc, $q); 

错误 -

  

1064 - 您的SQL语法出错;检查手册   对应于您的MySQL服务器版本,以使用正确的语法

near ''$aItemSlot' = '$seton' WHERE username='$us'' at line 1

这是我的来源

$q = "SELECT * FROM users WHERE username='$us'";
$r = @mysqli_query($dbc, $r);
$row = mysqli_fetch_array($r);
       $aHelmet_Slot  = $row['helmet_slot'];
       $aShield_Slot  = $row['shield_slot'];
       $aWeapon_Slot  = $row['weapon_slot'];
       $aGloves_Slot  = $row['g1loves_slot'];
       $aShoes_Slot  = $row['shoes_slot'];
       $aArmor_Slot  = $row['armor_slot'];
       $aEar_Slot  = $row['ear_slot'];
       $aBelt_Slot  = $row['belt_slot'];
       $aRing1_Slot  = $row['ring1_slot'];
       $aRing2_Slot  = $row['ring2_slot'];
       $aRing3_Slot  = $row['ring3_slot'];
       $aRing4_Slot  = $row['ring4_slot'];
       $aCharLevel  = $row['char_lvl'];


    if ($aItemSlot == 'ring_slot'){
    if($aCharLevel >= $aItem_Level){
        $NotEmpty = false; 
        if ($aRing1_Slot == 0){
            $q = "UPDATE users SET ring1_slot='$seton' WHERE username='$us'";
            $r = @mysqli_query($dbc, $q);
            $NotEmpty = true;
        }
        if (($aRing2_Slot == 0) && (!$NotEmpty)){
            $q = "UPDATE users SET ring2_slot='$seton' WHERE username='$us'";
            $r = @mysqli_query($dbc, $q);
            $NotEmpty = true;
        }
        if (($aRing3_Slot == 0) && (!$NotEmpty)){
            $q = "UPDATE users SET ring3_slot='$seton' WHERE username='$us'";
            $r = @mysqli_query($dbc, $q);
            $NotEmpty = true;
        }
        if(($aRing4_Slot == 0) && (!$NotEmpty)){
            $q = "UPDATE users SET ring4_slot='$seton' WHERE username='$us'";
            $r = @mysqli_query($dbc, $q);
            $NotEmpty = true;
        }
        if(!$NotEmpty){
            $q = "UPDATE items SET item_position='2' WHERE it_id='$aRing1_Slot'";
            $r = @mysqli_query($dbc, $q);
            $q = "UPDATE users SET ring1_slot='$seton' WHERE username='$us'";
            $r = @mysqli_query($dbc, $q);
            $NotEmpty = true;
        }
        $q = "UPDATE items SET item_position='3' WHERE it_id='$seton'";
        $r = @mysqli_query($dbc, $q);
    }
}
else 
{
    if ($aCharLevel >= $aItem_Level){
        $link_slot_var = "a" .$aItemSlot;
        $aSlotItemID = $$link_slot_var;
        if($aSlotItemID <> 0){
            $q = "UPDATE items SET item_position='2' WHERE it_id='$aSlotItemID'";
            $r = @mysqli_query($dbc, $q);
        }
        $q = "UPDATE users SET '$aItemSlot' = '.$seton.' WHERE username='$us'; // it fails there 
        $r = @mysqli_query($dbc, $q);
        $q = "UPDATE items SET item_position='3' WHERE it_id='$seton'";
        $r = @mysqli_query($dbc, $q);
    }
}

7 个答案:

答案 0 :(得分:1)

为什么使用表名作为变量?

{$aItemSlot}

一般来说,它应该是这样的:

$mysqli->query("Update users 
set aItemSlot = '$seton'
where username = $us
") ;

另外,请尝试使用prepared statements

<强>更新 更新与此表相关的行:

UPDATE [LOW_PRIORITY] [IGNORE] table_reference
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
  

UPDATE语句更新指定表中现有行的列   有了新的价值观。 SET子句指示要修改的列和   他们应该给出的价值观。每个值都可以作为   表达式,或关键字DEFAULT,以明确地将列设置为它   默认值。 WHERE子句(如果给定)指定条件   用于标识要更新的行。没有WHERE子句,所有行都是   更新。如果指定了ORDER BY子句,则更新行   指定的顺序。 LIMIT条款限制了   可以更新的行数。

您还可以执行覆盖多个表的UPDATE操作。

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;

<强> UPDATE2 您需要检查/更新每一行。

$stmt = $mysqli->prepare("UPDATE table SET col1 = ?, col2 = ?, col3 = ? WHERE id = ? ")
$stmt->bind_param('sssi', $var1, $var2, $var3, $id);

这显示了you need to do

答案 1 :(得分:1)

在mysql数据库字段名称之前不应该有 $ 符号它应该是这样的

UPDATE users SET aItemSlot = '".$seton."' WHERE username='".$us."'

以上述格式修改您的查询并尝试执行

答案 2 :(得分:0)

你错过了任务操作员:

UPDATE users SET " . $aItemSlot . " = '" . $seton . "' WHERE username='$us'";

答案 3 :(得分:0)

您的查询应该是这样的:

"UPDATE users SET " . $aItemSlot . "='$seton' WHERE username='$us'";
                                    ^ assignment operator

答案 4 :(得分:0)

这是一种有效的语法..在进​​行查询之前,你必须确保这些参数是有效的......

$sql = "UPDATE users SET {$aItemSlot} = '{$seton}' WHERE username = '{$us}'";

答案 5 :(得分:0)

试试这个,这肯定会有用

 $q = "UPDATE users SET ".$aItemSlot." = " . $seton . " WHERE username= " . $us; 

答案 6 :(得分:0)

您需要稍作调整。

PHP / SQL

$q = "UPDATE users SET aItemSlot = '".$seton."' WHERE username='".$us."'";

// Or if $aItemSlot actually is a variable
$q = "UPDATE users SET '".$aItemSlot."'='".$seton."' WHERE username='".$us."'";

底部注释:因为$aItemSlot以&#39; a&#39;开头。我想知道这是否是一个数组。在这种情况下,您的脚本将失败,表示数组到字符串转换失败。如果是这种情况,请使用$aItemSlot检查var_dump()占用的值。