1

我正在尝试使用从爆炸数组中提取的值更新数据库中的记录

    $arr2 = explode(",",$_POST['hidden-tags']); 
   //echo $arr2[0];

   //insert new rows into blog post
    mysql_select_db($db, $db);
 $insertq = mysql_query("UPDATE blog SET tags1 = $arr2[0],tags2 = $arr2[1],tags3 = $arr2[2], tags4 = $arr2[3], tags5 = $arr2[4]  WHERE idblog = '$id' ",$dbconnet);

如果我一次回显我的数组中的值,效果很好。一旦我尝试将它们放入数据库中,该行就会变为空。更重要的是,用户可能没有输入 5 个项目,他们可能只输入了 1 个,但我认为这不是问题所在。老实说,我不明白为什么它目前正在失败。

我知道我可以将所有值保存在一个字段中,但是当我稍后返回并查询时,将其作为单独的字段会更容易。

4

4 回答 4

1

如果列的数据类型是字符串,则值必须用单引号引起来,因为它们是字符串文字。例如,

$insertq = mysql_query("UPDATE blog SET tags1 = '". $arr2[0] . "',....");

作为旁注,SQL Injection如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-02-06T11:17:45.483 回答
1

它应该是这样的:

$insertq = mysql_query("UPDATE blog SET tags1 = "'.$arr2[0].'",tags2 = "'.$arr2[1].'",tags3 = "'.$arr2[2].'", tags4 = "'.$arr2[3].'", tags5 = "'.$arr2[4].'"  WHERE idblog = "'.$id.'" ",$dbconnet);
于 2013-02-06T11:18:57.337 回答
1

我认为您可能需要查看表的数据类型。如果您使用 varchar 或 text 作为数据类型,则需要单冒号。

$insertq = mysql_query("UPDATE blog SET tags1 =' $arr2[0]',tags2 = '$arr2[1]',tags3 = '$arr2[2]', tags4 = '$arr2[3]', tags5 = '$arr2[4]'  WHERE idblog = '$id' ",$dbconnet);

此外,如果idblog是整数,则不要使用单引号。

希望这可以帮助

于 2013-02-06T11:19:49.633 回答
1
$insertq = mysql_query("UPDATE blog SET tags1 = $arr2[0],tags2 = $arr2[1],tags3 = $arr2[2], tags4 = $arr2[3], tags5 = $arr2[4]  WHERE idblog = '$id' ",$dbconnet);

应该:

$insertq = mysql_query("UPDATE blog SET tags1 = '".$arr2[0]."',tags2 = '".$arr2[1]."',tags3 = '".$arr2[2]."', tags4 = '".$arr2[3]."', tags5 = '".$arr2[4]."'  WHERE idblog = '".$id."' ,$dbconnet);

或者整个查询将变量名称视为字符串的一部分

编辑:我把引号倒过来了。

于 2013-02-06T11:16:11.647 回答