作品(エラーを強調するために簡略化さ):MySQLのクエリはPHPでのNULL値を返しますが、通常、私は、コードを次している
SELECT @x := @x + 1 FROM some_table, (SELECT @x := 0) y
それは、MySQLで動作しますが、私はPHPでそれを使用する場合、それが壊れるとすべて返しますNULL値。私はこの部分を例えば 'test'のようなものに置き換えると、@ x + 1部分と関係があることを知っています。
何が問題になりますか?
作品(エラーを強調するために簡略化さ):MySQLのクエリはPHPでのNULL値を返しますが、通常、私は、コードを次している
SELECT @x := @x + 1 FROM some_table, (SELECT @x := 0) y
それは、MySQLで動作しますが、私はPHPでそれを使用する場合、それが壊れるとすべて返しますNULL値。私はこの部分を例えば 'test'のようなものに置き換えると、@ x + 1部分と関係があることを知っています。
何が問題になりますか?
これは正常に動作します(PHP 5.6.30およびMySQL 8.0.0でテスト済み)。 (私は私のテーブルfoo
に3行を追加した後)
$stmt = $pdo->query("SELECT @x := @x + 1 FROM foo, (SELECT @x := 0) y");
print_r($stmt->fetchAll(PDO::FETCH_BOTH));
出力:連想配列のキーは完全な表現であることを
Array
(
[0] => Array
(
[@x := @x + 1] => 1
[0] => 1
)
[1] => Array
(
[@x := @x + 1] => 2
[0] => 2
)
[2] => Array
(
[@x := @x + 1] => 3
[0] => 3
)
)
注意。クエリで列にエイリアスを付けることができます。
私はこれまでにSET
を使ったことがありません。 SELECT
と動作しますか?
SELECT @x := @x + 1
FROM some_table CROSS JOIN
(SELECT @x := 0) y;
私は誤って入力しました。私は自分のコードに「SELECT」を持つことを意図していました。ただそれを変更しました。それについての謝罪 –
うーん、それは動作します。私は最小限のエラーの場合には、あまりにも多くのコードを削除したと思います。私はどこでエラーが発生したか正確に見るために遊んでいきます。 –