2016-07-21 14 views
0

ich eine temporäre Tabelle mit der folgenden PHP-Skript erstellt habePHP nicht autoincrement Feldes in einer MySQL temporären Tabelle einfügen

$query = "CREATE TEMPORARY TABLE people(id int(11) not null auto_increment, first_name varchar(25), second_name varchar(25), primary key(id))"; 
$q=$pdo->prepare($query); 
$q->execute(); 

Ich habe dann versucht, Daten zu dieser Tabelle

$query2 = "INSERT INTO people(first_name, second_name) VALUES(:firstname,:secondname)"; 
$q2=$pdo->prepare($query2); 
$q2->bindValue(':firstname', $firstname,PDO::PARAM_STR); 
$q2->bindValue(':secondname', $secondname,PDO::PARAM_STR); 
$q2->execute; 
mit den folgenden Skript einfügen

Die Daten, die ich einfügen möchte, stammen aus einer anderen Tabelle. Anfangs schien dies als ein Problem, das durch einen elementaren Fehler verursacht hat, aber ich kann nicht herausfinden, wo das Problem da ist, wenn ich dieses Skript ausführen (siehe unten), ich sehe, dass alle Felder

$query3 = "DESCRIBE people"; 
     $q3 = $con->prepare($query3); 
     $q3->execute(); 
     $row = $q3->fetchAll(PDO::FETCH_COLUMN); 
print_r($row); 
erstellt wurden
+0

Bitte nicht missbrauchen die Schnipsel Werkzeug –

+1

'$ q3 = $ Con-> prepare ($ query10); 'Was ist' $ query10'? – Philipp

+0

Haben Sie versucht, Ihre ID-Spalte inline auf Primärschlüssel zu setzen? '... TABELLE Menschen (ID int (11) NOT NULL PRIMÄRSCHLÜSSEL AUTO_INCREMENT, ...);' –

Antwort

1
$query2 = "INSERT INTO people(first_name, second_name) VALUES(:firstname,:secondname)"; 
$q2=$pdo->prepare($query2); 
$q2->bindValue(':firstname', $firstname,PDO::PARAM_STR); 
$q2->bindValue(':secondname', $secondname,PDO::PARAM_STR); 
$q2->execute; 

Die () für die execute() Methode fehlen.

Additionaly:

Wenn Sie versuchen, die Tabelle aus einer anderen Tabelle zu füllen, ohne weitere Schritte dazwischen, könnte man dies über mysql direkt tun:

$query2 = "INSERT INTO people(first_name, second_name) 
select firstname, secondname from otherTABLE where something = 'xy'"; 
$pdo->exec($query2); 

es direkt in der Datenbank tun würde Reduzieren Sie die Wahrscheinlichkeit von Fehlern in PHP, die dasselbe versuchen.

Der Rest des Skripts korrekt ist, Getestet habe ich es vor Ort:

$pdo = new PDO('mysql:dbname=test;host=127.0.0.1', 'root', '', array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC)); 

$query = "CREATE TEMPORARY TABLE people(id int(11) not null auto_increment, first_name varchar(25), second_name varchar(25), primary key(id))"; 
$q = $pdo->prepare($query); 
$q->execute(); 

$firstname = 'test'; 
$secondname = 'what'; 

$query2 = "INSERT INTO people(first_name, second_name) VALUES(:firstname,:secondname)"; 
$q2 = $pdo->prepare($query2); 
$q2->bindValue(':firstname', $firstname, PDO::PARAM_STR); 
$q2->bindValue(':secondname', $secondname, PDO::PARAM_STR); 
$q2->execute(); 

$pdo->exec("INSERT INTO people(first_name, second_name) SELECT 'prename', 'surname'"); 

$result = $pdo->query('SELECT * FROM people'); 
echo '<pre>'; 
var_dump($result->fetchAll()); 
exit; 

Displays:

array(2) { 
    [0]=> 
    array(3) { 
    ["id"]=> 
    string(1) "1" 
    ["first_name"]=> 
    string(4) "test" 
    ["second_name"]=> 
    string(4) "what" 
    } 
    [1]=> 
    array(3) { 
    ["id"]=> 
    string(1) "2" 
    ["first_name"]=> 
    string(7) "prename" 
    ["second_name"]=> 
    string(7) "surname" 
    } 
} 
+0

Die fehlende() war ein Tippfehler. Die Tabelle ist eine temporäre Tabelle – tapeli

+0

Also bleibt das auto_increment Feld leer, wenn Sie versuchen, Ihr Skript auszuführen? – Philipp

Verwandte Themen