クエリはphpmyadminで正常に動作しますが、phpから実行すると0行が返されます。
-
19-09-2019 - |
質問
これには本当に困惑しています。これがphpです:
アップデート: 入力をエスケープしました(以前は別の方法で実行していましたが、mysql_real_escape_stringについては知りませんでした)。また、二重引用符を一重引用符に置き換えても、同じ問題が発生します。以下は更新されたコードです。
$request = mysql_real_escape_string($_POST['id']);
$colName = mysql_real_escape_string($_POST['col_name']);
function executeAssoc1($q)
{
$r = mysql_query($q) or die(mysql_error() . ' ' . $q);
$rass = mysql_fetch_assoc($r);
return $rass;
}
foreach(array_keys($_POST) as $pitem)
{
if($pitem == (...what I want it to...))
{
$pitem_name = mysql_real_escape_string(rawurldecode($pitem));
$qf = "SELECT * FROM possible_values WHERE table_id=$request AND col_name='$colName' AND value = '$pitem_name'";
$qfr = executeAssoc1($qf);
var_dump($pitem_name);
echo '<br>';
var_dump($qf);
echo '<br>';
var_dump($qfr);
}
}
以下は、1 つのループ中にコードが出力する内容の一部です。
string(37) "1 .ニューイングランド (北東部)"
string(122) "SELECT * FROM possible_values WHERE table_id=3 ANDcol_name='DIVISION' AND value = '1 .ニューイングランド (北東部)'"
ブール(偽)
このクエリを phpmyadmin SQL エディタにコピーすると、実際に結果が返されます。で提案されているように、LIKE "%...%" を使用してみました。 ここ しかし、同じことが起こります (phpmyadmin は行を返しますが、php は 0 行を返します)。
解決
の rawurldecode()のの上のマニュアルから:
注:rawurldecode()スペースに( '+')プラス記号をデコードしません。 urldecode()しません。
あなたが出力MySQLのクエリは、私はあなたのstrtingは次のようになります賭ける場合:
1+.New+England+(Northeast+region)
マニュアルエントリが示すとおり)(urldecodeを試してみます。
他のヒント
あなたは、単一引用符の代わりに二重引用符を使用する必要がありますすなわちます:
SELECT * FROM possible_values WHERE table_id=3 AND col_name='DIVISION' AND value = '1 .New England (Northeast region)'
二重引用符は、SQLの文字列に許可されていません。私は、MySQLは、いくつかの設定を使用して文字列のためにそれらを可能にすると思いますが、あなたはそれらを使用しないでください。
エラーを返す必要がありますので、私はそれがあなたの問題だとは思わない技術ます。
どのようなあなたの問題である可能性は、あなたのMySQLバージョンをサポートしていない可能性が古いMySQL拡張モジュールを、使用しているということです。
タイプミスかもしれませんが、
table_id=$request
その周りに引用符を持っている必要があります:
table_id='$request'