-2

PHP初心者です。最初の SQL クエリを開始したときに、この問題に直面しました。

ページでのデータベース クエリが失敗しました: SQL 構文にエラーがあります。1 行目の '['id']}' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

私のSELECTコマンドがあります:

$page_set = mysql_query(
    "SELECT * FROM pages WHERE subject_id  = {[$subject'id']}", $connection
);

すべてのデータベース テーブルを確認しましたが、すべて正しいです。このクエリは機能します:

$page_set = mysql_query("SELECT * FROM pages" ,$connection)
4

6 に答える 6

2

次のようなことを試してください:

$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = '" . $subject['id'] . "'", $connection);

これは、id が $subject 配列内のアイテムであると想定しています。中括弧「{」は必要ないと思いますが、where 句の値を一重引用符で囲む必要がある場合があります。

また、これが機能しない場合は、実行されている sql コマンドをエコーアウトしてみてください。問題を確認できるはずです (または、質問に SQL コマンドを投稿することもできます)。

于 2012-12-16T22:08:53.273 に答える
1

これを試して、

$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = '" . $subject['id'] . "'", $connection);

このコードは脆弱であることに注意してSQL Injectionください。回避方法については、以下の記事をお読みください。

于 2012-12-16T22:09:11.627 に答える
0

今後は、次のような別の変数でクエリ文字列を作成します。

$sql = "SELECT * FROM pages WHERE subject_id  = {[$subject'id']}";

次に、次のようにクエリを実行します。

$res = mysql_query($sql);

これを行うと、次のような完全に解決されたクエリ文字列を確認できます。

if (!$res) die("FAIL: $sql BECAUSE: " . mysql_error());

mysql_query()からの結果値をテストする必要があります-これはブラックボックスではありません。それはあなたのコントロールの及ばない理由で失敗する可能性があり、失敗するでしょう。障害が発生した場合、それを認識してエラー状態を処理する必要があります。

Siedbar注:mysql拡張機能はPHPで非推奨になっているため、現在/将来の作業にはPDOまたはMySQLiを選択することをお勧めします。

そして、あなたがPHPに不慣れであるなら、これはあなたが始めるのを助けるための本当に素晴らしい本です: http ://www.sitepoint.com/books/phpmysql5/

于 2012-12-16T22:19:38.707 に答える
0
$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = {$subject['id']}", $connection);
于 2012-12-16T22:09:26.883 に答える
0

上記のすべてが機能しますが、私が好む最もクリーンな方法は次のいずれかです。

$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = '".$subject['id']."'", $connection);

または、初心者としてのあなたへの私の推奨事項:

$subject_id = $subject['id'];
$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = '$subject_id'", $connection);

私が書いた2番目の方法を使用することをお勧めします。これは最善かつ最もクリーンな方法です。

注: mysql_ エクステンションは正式に減価償却されていることに注意してください。mysqli または PDO を使用する必要があります。(http://nl3.php.net/manual/en/function.mysql-query.php)

于 2012-12-16T22:13:37.300 に答える
0

それはあなたのSELECTコマンドではありません。これは PHP の mysql_query コマンドです。最初に SQL を作成し、それを使用してデータベースにクエリを実行します。

$sql = "SELECT * FROM pages WHERE subject_id  = {[$subject'id']}";
$page_set = mysql_query($sql, $connection);

エラーが発生した場合は、 を出力して$sql、どのように見えるかを確認できます。エラー メッセージと比較して、SQL クエリの作成を修正します。

変数の出力がどのように行われたかについてのインスピレーションを探している場合は、既存の回答を参照してください

非推奨の (長い間時代遅れで、もはやサポートされていない)mysql_*関数の代わりに PDO を使用すると、作業がより簡単になります。特に、パラメータ化されたクエリは SQL コマンドの作成に役立ちますが、mysql_*関数ではサポートされていません!

チュートリアルについては、次を参照してください: MySQL 開発者向け PDO チュートリアル

于 2012-12-16T22:14:56.643 に答える