-2
$sql="SELECT `name` FROM $table ";

列のレコードnameに引用符(')がある場合はどうなりますか?そのSELECTクエリを変更する必要がありますか?そしてどうやって?Mysqlが次のようなエラーを報告していることに気づきました。

1064:SQL構文にエラーがあります。3行目の「アクティベーション」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

'cause'アクティベーションは良くありません...しかしまあ...エラーが返された場合に文字列変数を読み取って操作できるのはなぜですか?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 +houssenéoprènenoir&rouge avec pochettefrontalelneo-10--jusqu'à10,2"

str_replaceの後の文字列

acer aspire one d270-n261g326ck noir + housse neoprene noir&rouge avec pochette frontale lneo-10 --jusqu'a 10,2 "

ereg_replaceの後の文字列

acer-aspire-one-d270-n261g326ck-noir --- housse-neoprene-noir --- rouge-avec-pochette-frontale-lneo-10 --- jusqu-a-10-2-

Mysqlエラー

1064:SQL構文にエラーがあります。3行目の「à10,2"」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

4

1 に答える 1

2
$row[0] = mysql_real_escape_string($row[0]);

が使用される前にこれを行いUPDATE queryます$row[0]。あなたは何も逃げていません。あなたのコードは私の目を出血させます...そして非常に安全ではありません。

于 2012-10-31T20:39:45.010 に答える