簡體   English   中英

PHP未在MySQL臨時表中插入自動遞增字段

[英]PHP not inserting autoincrement field in a MySQL temporary table

我使用以下PHP腳本創建了一個臨時表

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

然后,我嘗試使用以下腳本將數據插入該表

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

我嘗試插入的數據來自另一個表。 最初,這似乎是由基本錯誤引起的問題,但我無法弄清楚問題出在哪里,因為當我運行此腳本時(請參見下文),我看到所有字段都已創建

$query3 = "DESCRIBE people";
        $q3 = $con->prepare($query3);
        $q3->execute();
        $row = $q3->fetchAll(PDO::FETCH_COLUMN);
print_r($row);
$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;

()execute()方法是丟失。

另外:

如果您試圖從另一個表中填充該表,而中間沒有其他步驟,則可以直接通過mysql執行此操作:

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

直接在數據庫中執行此操作將減少php嘗試執行相同操作時出錯的機會。

您的腳本的其余部分是正確的,我在本地進行了測試:

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

顯示:

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"
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM