- ベストアンサー
【PHP】クエリーの実行に失敗してしまう。
社内で在庫管理システムを構築することになり、本をたよりにコーディングをしているのですが、エラーが発生して先へ進めなくなってしまいました。 <?php /* データベースに接続 */ $link = dbConnect(); /* 本日の日付を取得 yyyy-mm-dd */ $dt = date("Y-m-d"); /* リクエストデータを変数に格納 */ $act = getFormData("act"); $stk_map = getFormData("stk_map"); $stk_day = getFormData("stk_day"); $stk_div = getFormData("stk_div"); $stk_maker = getFormData("stk_maker"); $stk_brandname = getFormData("stk_brandname"); $stk_now = getFormData("stk_now"); $stk_stdprice = getFormData("stk_stdprice"); $stk_pcgprice = getFormData("stk_pcgprice"); $stk_purchaser = getFormData("stk_purchaser"); $stk_remarks = getFormData("stk_remarks"); $id = $row["id"]; if ($act == "add") { /* ファイルアップロード処理 */ $stk_imgname1 = fileUpload("uploadfile1"); $stk_imgname2 = fileUpload("uploadfile2"); $stk_imgname3 = fileUpload("uploadfile3"); /* データを追加 */ $query = "INSERT INTO stk_t SET"; $query .= (", stk_map = " . makeSqlStr($stk_map)); $query .= (", stk_day = " . makeSqlStr($stk_day)); $query .= (", stk_div = " . makeSqlStr($stk_div)); $query .= (", stk_maker = " . makeSqlStr($stk_maker)); $query .= (", stk_brandname = " . makeSqlStr($stk_brandname)); $query .= (", stk_now = " . makeSqlStr($stk_now)); $query .= (", stk_stdprice = " . makeSqlStr($stk_stdprice)); $query .= (", stk_pcgprice = " . makeSqlStr($stk_pcgprice)); $query .= (", stk_purchaser = " . makeSqlStr($stk_purchaser)); $query .= (", stk_remarks = " . makeSqlStr($stk_remarks)); $query .= (", imgname1_c = " . makeSqlStr($stk_imgname1)); $query .= (", imgname2_c = " . makeSqlStr($stk_imgname2)); $query .= (", imgname3_c = " . makeSqlStr($stk_imgname3)); /* クエリーを実行 */ mysql_query( $query ) or die("クエリーの実行に失敗しました"); } ?> <?php /* MySQLとの接続を閉じる */ mysql_close($link); ?> 「クエリーの実行に失敗しました」という所でひっかかってしまいます。 文字数の関係で省略した部分があります。 解決法をご教授頂けると助かります。。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
そもそも、insertの場合は insert into テーブル (カラム0, カラム1, ...) values (値0, 値1, ...) という形式が基本のはずです。 insertとupdateの構文がゴッチャになっていませんか?
その他の回答 (4)
- asuncion
- ベストアンサー率33% (2127/6290)
> データ表示部分 ここで、「/* 画像が投稿されていれば表示 */」というコメントがついている箇所の最後にある\nは、 \を\そのものとして扱うために\\nにしなければならないのではありませんか? また、ID~備考の各欄の中身が出ていませんが、 <?= ~ ?>というスクリプティングデリミタは文法上正しいのでしょうか? php.iniなどでshort_open_tagを有効にしてあれば <? ~ ?> という 形式は使えますが、= が入っていいのかどうか…。
- asuncion
- ベストアンサー率33% (2127/6290)
> $query .= (", stk_map = " . makeSqlStr($stk_map)); stk_map の直前のカンマは必要でしょうか? また、今回のように、SQL文が長きにわたる場合は ヒアドキュメントを使ってみると少しは見やすくなるかもしれません。
お礼
ご回答ありがとうございます。 ご指摘頂いた点のカンマを取りましたが変わりないようです。 ヒアドキュメントについては、少し調べてみましたが使い方がよく分かりません。。 ちなみにPHP、並びにMySQLの環境は、 PHP 4.4.5 MySQL 4.4.22 OSはWindowsです。
- moon_night
- ベストアンサー率32% (598/1831)
入れる値に日本語などが入っている場合は ' で囲わないとエラーになると思います。 例)$query .= (", stk_map = '" . makeSqlStr($stk_map) ."'");
お礼
ご指摘ありがとうございます。 問題箇所を ' で囲んでみましたが、同じエラーが発生してしまいます。 文字数制限の関係で全てのコードを記入。
- fire--
- ベストアンサー率49% (146/293)
エラーだった所に、echo mysql_error();を 入れてはどうですか。エラーメッセージが見れます。
お礼
回答ありがとうございます。 教えて頂いたコードを挿入してみました。 以下エラーの結果です。 入庫する商品の情報を入力し、最後に「追加」を選択してください。 Bad query: 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 ' stk_map = ''1111'', stk_day = '20070423', stk_div = ''製品(PC・ 翻訳してみると、どうやら SQL構文が間違っているようです。 しかし、いかんせん何処が間違っているのかさっぱり分かりません。。
お礼
ご指摘ありがとうございます。 updateの構文を記述してしまっていたんですね……。 ご指摘の通り、insert into テーブル (カラム0, カラム1, ...) values (値0, 値1, ...) という記述に変更したところ、データベースへの登録ができるようになりました。 ありがとうございます。もの凄く嬉しいです。 所で、画像のアップロードはできるのですが、うまく表示されません。 ご教授頂ければ助かります。