2012-04-03 17 views
0

I表にデータの6列を挿入する必要があり、データベース・テーブルを作成し、次のコードを持っているが、それはデータを挿入しませんテーブル。列カウントは、行1で、値のカウントと一致しない - が、列数が正しい

私は次のエラーを取得する:

列数は、下の行1

で値カウントと一致しないコードおよびテーブルに挿入されるべき配列データのますprint_rある:

ご協力いただきありがとうございます。ありがとうございます。

 // Database Authentication-user, password 
      $TableName = 'User_Data'; 
      $dbh = mysql_connect ("localhost", "username", "password") 
      or die ('Cannot connect to the database because: ' . mysql_error()); 

      mysql_select_db ("database"); 

     // Creates Database Table if it does not exist 
      if(mysql_num_rows(mysql_query("SHOW TABLES LIKE '".$TableName."'")) != 1) { 
      mysql_query("CREATE TABLE $TableName(
     id INT NOT NULL AUTO_INCREMENT, 
     PRIMARY KEY (id), 
     Topic    varchar(300) NOT NULL default '', 
     Post_Date   varchar(100) NOT NULL default '', 
     Phone_Number   varchar(100) NOT NULL default '', 
     Original_Description varchar(2000) NOT NULL default '', 
     Alt_Description  varchar(2000) NOT NULL default '', 
     Website_Link   varchar(2000) NOT NULL default '') ") or die(mysql_error()); 
      } 

     // Write to MySQL Database 
      $queries = array(); 
      for($i=0; $i<count($current_topic_array); $i++) { 
      $queries[] = '(
      '.$current_topic_array[$i].', 
      '.$post_date_array[$i].', 
      '.$phone_array[$i].', 
      '.$original_description_array[$i].', 
      '.$alt_description_array[$i].', 
      '.$website_link_array[$i].' 
      )'; 
      } 

      echo '<pre>'; 
      print_r($queries); 
      echo '</pre>'; 

      mysql_query("insert into $TableName (Topic, Post_Date, Phone_Number, Original_Description, Alt_Description, Website_Link) 
      values (". implode(',', $queries) . ")") or die(mysql_error()); 


Array 
(
    [0] => (
       'Classic Cars', 
       '05-02-2012', 
       '777-555-1212', 
       'Classic Car show held in Spring of May 2012', 
       'Classic Car May 2012', 
       'http://website.com/post/864.html' 
       ) 
    [1] => (
       'Classic Cars', 
       '07-13-2012', 
       '777-555-5412', 
       'Classic Car show held in Summer of July 2012', 
       'Classic Car July 2012', 
       'http://website.com/post/865.html' 
       ) 
    etc... 
) 
+0

'それをvar_dump'、それに' mysql_query'を実行する前に、最終的なクエリテキストを作成し、結果を投稿してください。 – DCoder

答えて

0

列がVARCHARであるため、文字列値を受け取る予定がある場合は、値を一重引用符で囲む必要があります。すべての列が文字列であるため、これを行う最も簡単な方法は、

mysql_query("insert into $TableName (Topic, Post_Date, Phone_Number, Original_Description, Alt_Description, Website_Link) 
     values ('". implode("','", $queries) . "')") or die(mysql_error()); 

です。おそらくPDOを調べてください。

EDIT あなたは、問題が何であるかを確認するために実行されています実際のクエリをエコーすることができるはずです。この

$sql = "insert into $TableName (Topic, Post_Date, Phone_Number, Original_Description, Alt_Description, Website_Link) 
     values ('". implode("','", $queries) . "')"; 
mysql_query($sql) or die(mysql_error()); 

のようなコードをリファクタリングしてみます。

+0

ありがとうございますが、配列print_rに見られるように、値はすでに一重引用符で囲まれています。あなたが投稿したmysql_query()を試してみましたが失敗しました。エラーは次のとおりです。SQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックし、正しい構文が「Classic Cars」、「05-02-2012」、「777-555」の行2 – Sammy

+0

BTWの近くで使用するようにしてください...私はプロフェッショナルなPHP/MYSQLプログラマ。私はPDOを使ったことはありません。私はちょうどGoogle上でそれを見つけ、それが何のために立っているかを見つけました。これは私には全く新しいものです。 – Sammy

+0

@Sammy print_rの結果として表示される引用符は、IMPLODEdを取得する値の一部ではありません。 PHPは文字列値の内部区切り文字です。私の答えごとにクエリの値をラップすると、エラーは発生しません。あなたが初心者の場合は、コードが脆弱でないことを確認するためにデータベースのエスケープについても読んでください(ヒント:PDOがあなたのためにエスケープします)。 – liquorvicar

関連する問題