簡単に言うと、テキスト ファイルを MySQL クエリに解析する PHP コードを書き込もうとしています。UPDATE ステートメントで構成されるクエリを除いて、すべて正常に動作します。
コード全体はちょっと長いですが、見たい場合はhttp://pastebin.com/xVR6ArD0
問題のある部分は次のとおりです。
while ($i<=$no_collumns)
{
$j = $i-1;
if (!
mysql_query
("UPDATE ResultsPredmet
SET ${parsed_collumns[$i]} = '${parsed_words[$j]}'
WHERE ${parsed_first_collumn} LIKE '${parsed_first_word}'")
)
{echo mysql_error()."\n"; break;}
// echo "\nUPDATE ResultsPredmet SET ${parsed_collumns[$i]} = '${parsed_words[$j]}' WHERE ${parsed_first_collumn} LIKE \"${parsed_first_word}\"";
$i++;
}
... ここで、$parsed_collumns と $parsed_words は文字列の配列で、$parsed_first_collumn と $parsed_first_word は文字列です。
変数の引用符とエスケープのすべての組み合わせを試しました。二重引用符で囲んでエスケープしたり、二重引用符で連結したりしてみましたが、おそらく「=」演算子を介して文字列を比較していたのだと思い、「LIKE」で試しました。私は数時間グーグルで検索し、人々が変数に単一引用符を使用すると言ったので、私もそれを試しましたが、うまくいきませんでした。
最後に、クエリをエコーしたところ、次のようになりました。
UPDATE ResultsPredmet SET grade = '10' WHERE name LIKE "Vildur"
UPDATE ResultsPredmet SET index = '117/2010' WHERE name LIKE "Vildur"
Updating table.
UPDATE ResultsPredmet SET grade = '6' WHERE name LIKE "NinoDoko"
UPDATE ResultsPredmet SET index = '132/2011' WHERE name LIKE "NinoDoko"
Updating table.
UPDATE ResultsPredmet SET grade = '10' WHERE name LIKE "Koco"
UPDATE ResultsPredmet SET index = '130/2011' WHERE name LIKE "Koco"
Done.
これは私にはかなり問題ないようです。私が得た他のクエリは、名前が一重引用符で囲まれている場合、または引用符がない場合やその他の組み合わせがない場合にのみ同じでした。
私が得るエラーは次のとおりです。
Updating table.
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'index = '117/2010' WHERE name LIKE 'Vildur'' at line 1
Updating table.
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'index = '132/2011' WHERE name LIKE 'NinoDoko'' at line 1
Updating table.
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'index = '130/2011' WHERE name LIKE 'Koco'' at line 1
どうやら、私が使用しているサーバーはMariaDB 5.5ですが、少し調査した後、完全にオフになっている可能性がありますが、一般的なMySQLに似ていると考えました。「更新表」です。私のコードではランダムなエコーです。インデントせずにクエリを試してみましたが、それでも同じエラーが発生しました。grade
およびで取得する値index
は文字列です。少なくともexplode()
.