$sql="SELECT `name` FROM $table ";
如果从name
列的记录中有引号(')会发生什么?
我需要更改SELECT查询吗?如何?我注意到Mysql报告了这样的错误:
1064:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第3行“激活”附近使用正确的语法
'因为'激活不好......
但是......如果它返回错误,为什么我可以读取和操作字符串变量?
我看到使用WHERE条件的例子......但我不需要,我必须从name
列中选择所有记录...请帮助
编辑:
//..connection to database part, then...
$sql="SELECT `name` FROM $table ";
$res=mysql_query($sql);
$c=0;
function contains($str, array $arr)
{
foreach($arr as $a) {
if (stripos($str,$a) !== false) return true;
}
return false;
}
$arr = array("à","â","æ","ç","è","é","ê","ë","î","ï","ô","œ","ù","û","ü","¡","¿","ñ","í","ó","ú","ä","ö","ß","ÿ");
while ($row = mysql_fetch_row($res)) {
$contiene = 0;
$link=strtolower($row[0]);
$link = iconv('Windows-1252', 'UTF-8//TRANSLIT//IGNORE', $link);
$link= utf8_decode($link);
$link = stripslashes($link);
$link = mysql_real_escape_string($link);
if (contains($link, $arr)) {
echo "String containing special char\n";
echo "$link\n";
$link = str_replace("à", "a", $link);
$link = str_replace("â", "a", $link);
$link = str_replace("æ", "ae", $link);
$link = str_replace("ç", "c", $link);
$link = str_replace("è", "e", $link);
$link = str_replace("é", "e", $link);
$link = str_replace("ê", "e", $link);
$link = str_replace("ë", "e", $link);
$link = str_replace("î", "i", $link);
$link = str_replace("ï", "i", $link);
$link = str_replace("ô", "o", $link);
$link = str_replace("œ", "oe", $link);
$link = str_replace("ù", "u", $link);
$link = str_replace("û", "u", $link);
$link = str_replace("ü", "ue", $link);
$link = str_replace("¡", "-", $link);
$link = str_replace("¿", "-", $link);
$link = str_replace("ñ", "n", $link);
$link = str_replace("í", "i", $link);
$link = str_replace("ó", "o", $link);
$link = str_replace("ú", "u", $link);
$link = str_replace("ä", "ae", $link);
$link = str_replace("ö", "oe", $link);
$link = str_replace("ß", "ss", $link);
$link = str_replace("ÿ", "y", $link);
echo "String with replaced char\n";
echo "$link\n";
$c++;
$contiene = 1;
}
$link=ereg_replace("[^a-z0-9\-]", "-", $link);
echo "String after ereplace:\n";
echo "$link\n";
if ($contiene ==1){
$l="UPDATE $table
SET link_rewrite='$link'
WHERE $table.name = '$row[0]' ";
$r=mysql_query($l);
if (!$r) {
echo mysql_errno() . ": " . mysql_error() . "\n";
}
}
}
echo "Update catlink_rewrite( $c )";
?>
出了什么问题?
包含重音或特殊字符的字符串:
acer aspire one d270-n261g326ck noir +housseéoprènenoir& rouge avec pochette frontale lneo-10 - jusqu'à10,2“
str_replace后的字符串:
acer aspire one d270-n261g326ck noir + housse氯丁橡胶黑色& rouge avec pochette frontale lneo-10 - jusqu'a 10,2“
ereg_replace之后的字符串:
宏基-向往酮D270-n261g326ck-比诺--- HOUSSE-氯丁橡胶比诺---胭脂-AVEC-防水袋-前锋-lneo-10 --- jusqu-A-10-2 -
Mysql错误:
1064:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第3行“à10,2”附近使用正确的语法
答案 0 :(得分:2)
$row[0] = mysql_real_escape_string($row[0]);
在使用UPDATE query
的{{1}}之前执行此操作。你没有逃避任何事情。你的代码让我的眼睛流血......并且非常不安全。