我有脚本,输入名称到MySQL数据库,使用mysql_real_escape_string,以便正确处理撇号。我遇到的麻烦是下面的脚本,检查是否使用另一个表单输入的名称与我的数据库中已存在的名称相对应,并且如果名称已找到,则更新该行。脚本匹配通过表单提交的名称与MySQL数据库中断当名称包含撇号
当我尝试在此脚本处理的表单中输入带撇号的名称时,出现一条错误消息,指出找不到名称,并且错误消息中的名称在撇号之前包含反斜杠,这显然是问题。
所以问题是,我该如何修改下面的脚本,以便它可以使用带撇号的名字?
感谢,
尼克
$row_count = count($_POST['name']);
if ($row_count > 0) {
mysql_select_db($database, $connection);
$name = array();
$workshop = array();
$not_found = array();
for($i = 0; $i < $row_count; $i++) {
// variable sanitation...
$name[$i] = mysql_real_escape_string(ucwords($_POST['name'][$i]));
$workshop[$i] = mysql_real_escape_string($_POST['workshop'][$i]);
}
$names = "('".implode("','",$name)."')";
$not_in = Array();
// lets say all names doesn't exist in `conference`
foreach($name as $value) {
// names in array are keys, not values
$not_in[$value] = true;
}
$query = mysql_query("SELECT Name FROM conference WHERE Name IN $names");
while(list($dbname) = @mysql_fetch_row($query)) {
// delete those name from $not_in who exists
unset($not_in[$dbname]);
}
// names in $not_in array are keys, not values
$not_in = array_keys($not_in);
if(empty($not_in)) {
// its ok, all names have been found. do the magic.
for($i = 0; $i < $row_count; $i++) {
$sql = "UPDATE conference SET Workshop = '$workshop[$i]' WHERE Name LIKE '$name[$i]'";
mysql_query($sql);
$body .= "Name: " . $name[$i] . " Workshop: " . $workshop[$i] . "\n\n";
}
你碰巧知道,mysql_real_escape_string是什么? –
它附加了一个反斜杠,以便撇号被作为字符串处理,而不是作为代码 – Nick
处理,那么为什么你认为这是一个问题?顺便说一句,任何机会,你可以缩短你的代码一个因素,比如5? –