2012-04-03 9 views
0

Ich habe den folgenden Code, der eine Datenbanktabelle erstellt und dann 6 Datenspalten in die Tabelle einfügt, aber die Daten nicht einfügt Der Tisch.Die Spaltenanzahl entspricht nicht der Wertanzahl in Zeile 1 - aber die Spaltenanzahl ist korrekt

ich die folgenden Fehler:

Column Zählwert zählt nicht in Zeile entspricht 1

Unten ist der Code und eine print_r der Arraydaten, die in die Tabelle eingefügt werden sollen:

Jede Hilfe wäre willkommen, danke.

 // 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

Erstellen Sie den endgültigen Abfragetext, bevor Sie 'mysql_query' darauf ausführen,' var_dump' it, posten Sie das Ergebnis. – DCoder

Antwort

0

Wenn Sie Spalten VARCHARs sind und daher erwarten Sie auf String-Werte, die Sie benötigen, erhalten Sie Ihre Werte in einfache Anführungszeichen wickeln. Der einfachste Weg, dies als alle Ihre Spalten zu tun, sind Strings

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

wäre Obwohl Sie wahrscheinlich PDO untersuchen sollte, wie es es für Sie tut.

EDIT Versuchen Sie den Code wie diese Sie

$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()); 

Refactoring sollte dann in der Lage sein, die eigentliche Abfrage Echo aus, die ausgeführt ist, ist zu sehen, was das Problem ist.

+0

Danke, aber wie Sie im Array print_r sehen können, sind die Werte bereits in einfache Anführungszeichen eingeschlossen. Ich habe versucht, die mysql_query() Sie gebucht und es ist fehlgeschlagen. Der Fehler ist: Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version für die richtige Syntax in der Nähe von "Classic Cars", "05-02-2012", "777-555" in Zeile 2 – Sammy

+0

BTW entspricht ... Ich bin kein professioneller PHP/MySQL-Programmierer. Ich habe PDO nie benutzt. Ich habe es bei Google nachgeschlagen und herausgefunden, wofür es steht. Das wäre für mich völlig neu. – Sammy

+0

@Sammy Die Anführungszeichen, die Sie als Ergebnis von print_r sehen, sind nicht Teil des Werts, der IMPLODEd erhält. Sie sind PHP interne Trennzeichen von String-Werten. Wenn Sie die Werte in die Abfrage gemäß meiner Antwort umbrechen, sollten Sie den Fehler nicht erhalten. Wenn Sie ein Anfänger sind, stellen Sie bitte sicher, dass Sie auch über das Entkommen von Datenbanken nachlesen, um sicherzustellen, dass Ihr Code nicht verwundbar ist (Hinweis: PDO wird die Flucht für Sie erledigen). – liquorvicar

Verwandte Themen