我在尝试插入/更新具有多个条目的单个字段时出错。
这是数据库方案:
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服务器版本相对应的手册,了解第…行"2")、("3")附近要使用的正确语法。。。。
我知道这是与爱好领域有关的条目,但我找不到方法纠正它。任何帮助都将不胜感激。
试着帮助自己
更改这条线路
$sql = mysql_query("UPDATE `users` SET name='".$name."',hobby='".$hobby."'");
用于调试到
$query = "UPDATE `users` SET name='".$name."',hobby='".$hobby."'";
echo $query;
die;
之后,您可以看到您的查询无效。检查错误并修复内爆
数据库模式看起来有点奇怪,但它不起作用的唯一原因是您需要转义要输入数据库的单引号。这是用前面的"''"完成的
$hobby = "(''" . implode("''),(''" , $hobby). "'')";
不过,还有其他问题需要考虑,例如,由于您没有指定where子句,因此该语句将更新数据库中的每个记录。
您也没有将name字段的内容传递给SQL语句。你应该知道:
$name to $_POST['name']