2016-05-31 2 views
0

PHP用のスクリプトをWebページの管理用に使用しています。アイテム登録を行うので、すべてのパラメータを取得してスクリプトに送信してINSERTを作成しますデータベース(mysql)。ここに私のコードがあります:PHPからmysql insertを使用する際にトラブルが発生する

//Getting the params 
    $title = $_POST["title"]; 
    $date = $_POST["date"]; 
    $hour = $_POST["hour"]; 
    $description = $_POST["description"]; 
    $link = $_POST["link"]; 
    $speaker = $_POST["speaker"]; 
    $site = $_POST["site"]; 
    $file = $_POST["file"]; 
//Link and File are optional, so I'll be using NULL instead if they're empty 
    $link = !empty($link) ? ("'".$link."'") : ("'". NULL ."'"); 
    $file = !empty($file) ? ("'".$file."'") : ("'". NULL ."'"); 
//Now I'm ready to build the query 
    $query = "INSERT INTO ".$type; 
    $query = $query . "(title,data,hour,description,link,speaker,site,file)"; 
    $query = $query . "VALUES ("; 
    $query = $query . "'" .$title."'"; 
    $query = $query . ",'".$date."'"; 
    $query = $query . ",'".$hour."'"; 
    $query = $query . ",'".$description."'"; 
    $query = $query . ",".$link; 
    $query = $query . ",'".$speaker."'"; 
    $query = $query . ",'".$site."'"; 
    $query = $query . ",".$file.")"; 
//Finally, I'll be sending the INSERT as a query using: 
    $result = mysql_query($query); 
    if(!$result) 
     echo "SQL Error" 

そして、私はいつもエラーの文章の中に入っています。 同じWebページ上の他のスクリプトに他のスクリプトを挿入していますが、うまく動作しますが、これはそれらを模倣しています。私がチェックした:

  1. にmysql_connect()およびmysql_select_db()OKです、私が使用し
  2. データベースのユーザーがINSERT
  3. データベース接続を行うための助成金(SELECTクエリを使用してチェック)
を持っています

何かヒントをいただければ幸いです。

[SOLVED] 文字列がエスケープされていないため、引用符がクエリを破っていました。したがって、この種の問題を引き続き発行し、廃止予定のmysql _ APIを使用している場合は、 mysql_escape_string メソッド(チェックEscaping single quote in PHP when inserting into MySQL)が必要になることがあります。

+0

テーブルの構造だけでなく、形式 – user1234

+2

**のコードを入力してください。停止**には、廃止予定の「mysql_」APIを使用してください。 mysqli_'または 'PDO'を用意してください。 – Jens

+1

mysql_error()関数を呼び出して、エラーの内容を調べてください。 – Jens

答えて

0

これらの行を使用してください。 PHPヌルで

$link = !empty($link) ? $link : NULL; 
$file = !empty($file) ? $file :NULL ; 

引用符なしNULLでも$リンクと$ファイルに「」エクストラは使用しないでください。 queryを実行する前に

はあなたが連結の問題を持って、それを印刷しようとPhpMyadmin

+0

お返事ありがとうございます。 @ Ms.Nehalに返答したように、元のコードからの転写を忘れました。私はNULL値の引用符を使用しませんが、連結文字列の引用符を追加しています。申し訳ありません、私は今編集中です。 – ytturi

0

で実行されます。これであなたのコード行を変更してみてください。また

//Link and File are optional, so I'll be using NULL instead if they're empty 
    $link = !empty($link) ? ($link) : (NULL); 
    $file = !empty($file) ? ($file) : (NULL); 
//Now I'm ready to build the query 
    $query = "INSERT INTO $type (title,data,hour,description,link,speaker,site,file) VALUES ('" .$title."','".$date."' 
      ,'".$hour."','".$description."','".$link."','".$speaker."','".$site."','".$file."')"; 

、NULL文字列として渡されることはありません。それ以外の場合は、代わりに として扱われます。

+0

よろしくお願いします。私はこのページの他の例でも同じミスを見ました。 私はコメントから機密データを消去する場合、空のリンク/ファイルのための私のラインであるいくつかの転記ミスをしたと思う: \t \t $リンク=空($リンク)!? ( "'"。$ link。 "'"):( "'"。NULL。 "'"); \t \t $ file =!empty($ file)? ( "'"。$ file。 "'"):( "'"。NULL。 "'"); クエリが送信された場合、文字列を印刷すると、値がNULLのときに結果が ''となります。 – ytturi

+0

@yuturi、申し訳ありませんが、あなたが言うことは明確ではありません。もっと気まぐれに指定してください。 – Nehal

+0

投稿を書きましたがエラーが発生しました。連結がうまくいき、NULL値が適切に送信されます。 – ytturi

関連する問題