我在尝试插入/更新包含多个条目的单个字段时收到错误。
这是数据库方案:
id INT(8) NOT NULL auto_increment,
name VARCHAR(64),
hobby VARCHAR(500)
HostServer Php版本为5
以下是我的表单代码: -
<form method=post>
<label>name</label>
<input type=text name=name>
<label>hobby</label>
<select name="hobby[]" multiple="multiple">
<option value=1>gardening
<option value=2>Music
<option value=3>Movies
<option value=4>Games
</select>
</form>
现在使用以下php代码处理多个值: -
foreach($_POST['hobby'] as $key => $value){
$_POST['hobby'][$key] = mysql_real_escape_string($value);}
$hobby = $_POST['hobby'];
$hobby = "('" . implode("'),('" , $hobby). "')";
$sql = mysql_query("UPDATE `users` SET name='".$name."',hobby='".$hobby."'");
但是输出时出现以下错误: -
您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以获得在&#39; 2&#39;)附近使用的正确语法,(&#39; 3&#39;)&#39;在线......
我知道这是与爱好领域相关的条目,但我无法找到方法 纠正它。任何帮助将不胜感激。
答案 0 :(得分:1)
尝试帮助你自己
更改此行
$sql = mysql_query("UPDATE `users` SET name='".$name."',hobby='".$hobby."'");
用于调试
$query = "UPDATE `users` SET name='".$name."',hobby='".$hobby."'";
echo $query;
die;
之后,您可以看到您的查询无效。检查错误并修复你的内爆
答案 1 :(得分:1)
数据库模式看起来有点奇怪但是这个不起作用的唯一原因是您需要转义要输入数据库的单引号。这是通过前面的'\'
完成的$hobby = "(\'" . implode("\'),(\'" , $hobby). "\')";
还有其他问题需要考虑,因为您没有指定where子句,因此该语句将更新数据库中的每条记录。
答案 2 :(得分:0)
您也没有将name字段的内容传递给SQL语句。你应该知道:
$name to $_POST['name']