• 締切済み

SQL文のエラー

SQL文でエラーが表示されます。どの部分を修正すればいいですか? SQL文が長いので文字列を結合する演算子「.」を使って複数行に分けています。 エラー内容:SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= ? and product_id = product.id' at line 2 //商品番号だけでなく、商品名や価格も表示したいので商品情報を保持するproductテーブルと 結合する。 //全て取得するのでSELECTは* //favoriteテーブルにはcustomer_idとproduct_id //productテーブルにはid, name, price $sql = 'SELECT * FROM favorite, product' . 'WHERE customer_id = ? and product_id = product.id '; // ?に顧客番号を指定する。 // favoriteテーブルの商品番号(product_id列)と、productテーブルの商品番号(id列)が // 一致している行だけが必要なので、WHERE句に条件を追加する。

みんなの回答

  • ubku
  • ベストアンサー率37% (227/608)
回答No.2

SELECT *FROM favorite, productWHERE customer_id = ? and product_id = product.id デバッガで $sql を見てみると分かると思いますが、product と WHERE の間にスペースがありません。 その場合 MySQL 8.0 ではそのようなエラーメッセージが出ます。

  • asciiz
  • ベストアンサー率70% (6803/9674)
回答No.1

どこが間違ってるか、もなにも、 >// ?に顧客番号を指定する。 ってコメントにまで書いてあるのに、そうなっていないのが原因だと思いますが? また、検索する値が数値ならば、SQL文にそのまま書けますが、文字列であるならば、シングルクォートでくくることが必要になります。 現在のプログラムで生成される 「WHERE customer_id = ? 」 という検索条件は、数値でない「?」文字列をシングルクォートでくくらずに指定している、という二重の文法エラーとなっています。 IDが数値であるならば例えば、「WHERE customer_id = 100 」みたいにならなければいけません。 IDが文字列であるならば例えば、「WHERE customer_id = 'abcde' 」みたいにならなければいけません。 どんなIDなんでしょうか? $sql は、投げようとするSQL命令を作るための、文字列変数のようです。 なのでそこに、他の変数群から、自分のしたい検索のSQL命令を、作り上げるんです。 例えば、PHPで組んでいるとして、数値であるID番号を $user_id に保持していたとすれば、 $sql = 'SELECT * FROM favorite, product '. 'WHERE customer_id = '. $user_id. ' and product_id = product.id '; みたいにすればいいんじゃないでしょうか。 ※PHPの場合、数値を文字列に結合すると自動的に文字列にしてくれるので。 ※※他の言語である場合、数値データは明示的に文字列変換しなければ、文字列の結合ができないこともあります。 もちろんこの式を実行する前に、必ず $user_id に数値データが入っているようにしてください。 もし$user_id が未定義だったとすると、 'SELECT * FROM favorite, product WHERE customer_id = and product_id = product.id' というSQL文 になってエラーが出ますし、$user_id に文字列データが入っていれば、 'SELECT * FROM favorite, product WHERE customer_id = abcde and product_id = product.id' みたいになって、質問と同じエラーが出ます。

関連するQ&A