1

簡潔にするために、関連する情報のみをここに表示します。

ほぼ同じコードが 2 つあり、1 つは機能し、もう 1 つは機能しません。

$query = $pdo->prepare("SELECT * FROM active_notifications WHERE direction = '>' AND $usdCurrent > trigger_price AND currency = '$'");
$query->execute();  
var_dump($query);

$result = $query->fetchall((PDO::FETCH_ASSOC));
var_dump($result);

上記のコードは機能します。クエリを var ダンプすると、次のようになります。

SELECT * FROM active_notifications WHERE direction = '>' AND 182.62000 > trigger_price AND currency = '$'

私の問題は、$ 記号を £ 記号に交換するわずかに異なるコードを試したときに発生します

コードは次のとおりです。

$query = $pdo->prepare("SELECT * FROM active_notifications WHERE direction = '>' AND $gbpCurrent > trigger_price AND currency = '£'");
$query->execute();  
var_dump($query);

$result = $query->fetchall((PDO::FETCH_ASSOC));

var_dump($result);

クエリを var ダンプすると、次のようになります。

SELECT * FROM active_notifications WHERE direction = '>' AND 114.19942 > trigger_price AND currency = '£'

ここまではすべて正しいので、

作成したクエリを PhpMyAdmin で直接実行すると、期待される結果が返されますが、£gbp クエリの $result を var_dump すると、null 配列が得られます。

最初は、変数名を再利用していたことが原因かもしれませんが、両方を完全に分離して試してみました.USDクエリは常に機能し、GBPは機能せず、常にnull配列が返されます.

私が言ったように、生成されたクエリは両方ともPhpMyAdminで正しく機能します(データベースに対して直接実行した場合)

唯一の違いは、1 つのクエリには £ 記号があり、もう 1 つのクエリには $ 記号があることです。

£ 記号は、PHP で許可されていない記号のようなものですか?

ありがとう、ジョン

4

1 に答える 1

3

php と mysql の文字エンコーディングを確認してください。あなたの php£は mysql と同じではないと思います£

理想的には、通貨フィールドに 、 など'gpb'を使用することで、すべての混乱を避けることができます。'usd'

OPから:

これを pdo init に平手打ちしました: PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"で、すべて問題ありません。

于 2013-10-19T13:11:03.787 に答える