你能说我在这个简单的查询中犯了哪些错误
$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);
}
}
答案 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)
您需要稍作调整。
$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()
占用的值。