0

質問は簡単です。

私は何を持っていて、何が問題なのですか?
私は二次元配列を持っています$someArray[][]。「件名」または「日付」を入れることができる最初のブラケット。2 つ目は 1 から 4 までです (ほんの一例です$someArray['date'][0]) 。

データベースからデータを取得しようとすると、mysql_query()問題が発生します。この 2 次元配列をクエリの WHERE 部分で使用しようとしています。

何が機能し、何が機能しないかの例
$result = mysql_query("SELECT some from table where date='$someArray[date][0]' AND subject='$someArray[subject][0]') or die(mysql_error());

これを使用すると、何も返されません。しかし、これらの値を最初に新しい変数に代入するとき:

$variable1 = $someArray['date'][0];
$variable2 = $someArray['subject'][0];

そしてそれらをクエリで使用します

`$result = mysql_query("SELECT some from table where date='$variable1' AND subject='$variable2') or die(mysql_error());

それは魅力のように機能します。

質問
私の最初のクエリの何が問題になっていますか? それらの配列を間違って書いているのでしょうか? エラーは発生しません。
mysql クエリで [] ブラケット内に単一のアポストロフィを入れようとしましたが、エラーが発生します。また、クエリで次のような配列を使用すると、それらがなくても機能$someotherArray[somedata]します。

4

2 に答える 2

2

クエリの構文には、終了の二重引用符がありません。そして、単に文字列を追加するのではなく、文字列を連結します。文字列パーサーは、多次元の配列が好きではありません。

解決:

$result = mysql_query("SELECT some from table where date='".$someArray[date][0]."' AND subject='".$someArray[subject][0]."'") or die(mysql_error());

そして@barmarが言及したように括弧も機能します

補足として、SQL インジェクションが確実に防止されるように、データをエスケープしてください。

于 2013-02-04T22:45:30.063 に答える
2

配列補間は、単一レベルの添え字に対してのみ機能します。多次元配列の場合、{...}ラッパーを使用する必要があります。

$result = mysql_query("SELECT some from table where date='{$someArray['date'][0]}' AND subject='{$someArray['subject'][0]}') or die(mysql_error());
于 2013-02-04T22:45:38.107 に答える