2016-07-21 77 views
1

我有下面的MySQL插入語句,代碼運行,並且PDO不報告任何錯誤消息,但是第一條語句不會將數據保存到數據庫(沒有新的排在地址表中),而第二次發射罰款。PDO MYSQL插入語句不工作(沒有錯誤給出)

$sql=$dbh->prepare("INSERT INTO `Address` (`ID`, `Street`, `Street2`, `Town`, `County`, `Postcode`) VALUES (NULL, ?,?,?,?,?)"); 

     $sql->execute(array($_POST['street'], $_POST['street2'], $_POST['town'], $_POST['county'], $_POST['postcode'])); 

     $addressID = $dbh->lastInsertId(); 

     $firmSQL = $dbh->prepare("INSERT INTO TaxiFirm (Name, LogoURL, AddressID, Phone, Email, LicenseExpiry, ContractDate, Active) VALUES (?, ?, ?, ?, ?, ?, ?, 1)"); 
     $firmSQL->execute(array($_POST['name'], $_POST['url'], $addressID, $_POST['phone'], $_POST['email'], $_POST['license'], $_POST['contract'])); 

的地址表中的SQL:

CREATE TABLE `Address` (
    `ID` int(11) NOT NULL, 
    `Street` varchar(100) NOT NULL, 
    `Street2` varchar(100) NOT NULL, 
    `Town` varchar(100) NOT NULL, 
    `County` varchar(100) NOT NULL, 
    `Postcode` varchar(20) NOT NULL 
) 

ALTER TABLE `Address` MODIFY `ID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3; 
ALTER TABLE `Address` 
    ADD PRIMARY KEY (`ID`); 

DESCRIBE Address;

ID int(11) NO PRI  auto_increment 
Street varchar(100) NO    
Street2 varchar(100) NO    
Town varchar(100) NO    
County varchar(100) NO    
Postcode varchar(20) NO    

我看不出什麼毛病的代碼,結果呢?

回答

3

您在指定NULL作爲ID的值,但是它是NOT NULL列。 ID沒有auto_increment,所以該聲明將真正嘗試將null插入到字段中,該字段失敗。

的意見後:

所以我們可以說,你的表設置正確。我重複你的步驟在本地,得到了相同的結果:

mysql> DESCRIBE Address; 
+----------+--------------+------+-----+---------+----------------+ 
| Field | Type   | Null | Key | Default | Extra   | 
+----------+--------------+------+-----+---------+----------------+ 
| ID  | int(11)  | NO | PRI | NULL | auto_increment | 
| Street | varchar(100) | NO |  | NULL |    | 
| Street2 | varchar(100) | NO |  | NULL |    | 
| Town  | varchar(100) | NO |  | NULL |    | 
| County | varchar(100) | NO |  | NULL |    | 
| Postcode | varchar(20) | NO |  | NULL |    | 
+----------+--------------+------+-----+---------+----------------+ 
6 rows in set (0.01 sec) 

當執行代碼:通過檢查數據庫

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

$sql = $dbh->prepare("INSERT INTO `Address` (`ID`, `Street`, `Street2`, `Town`, `County`, `Postcode`) VALUES (NULL, ?,?,?,?,?)"); 
$sql->execute(array('street', 'street2', "town", 'county', 'postcode')); 
$addressID = $dbh->lastInsertId(); 

var_dump($addressID); // string(1) "3" 

確認:

mysql> SELECT * FROM Address; 
+----+--------+---------+------+--------+----------+ 
| ID | Street | Street2 | Town | County | Postcode | 
+----+--------+---------+------+--------+----------+ 
| 3 | street | street2 | town | county | postcode | 
+----+--------+---------+------+--------+----------+ 
1 row in set (0.00 sec) 

最後的猜測:參數丟失在您的$_POST - 訪問陣列的陣列/錯誤索引

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

$sql = $dbh->prepare("INSERT INTO `Address` (`ID`, `Street`, `Street2`, `Town`, `County`, `Postcode`) VALUES (NULL, ?,?,?,?,?)"); 
$sql->execute(array('street', 'street2', null, 'county', 'postcode')); 
$addressID = $dbh->lastInsertId(); 

var_dump($addressID); // string(1) "0" 
exit; 
+0

謝謝,實際上我遺漏了一些SQL,ID設置爲auto_incremenet,請參閱更新 –

+0

你沒有得到像「[Err] 1075 - 錯誤表定義的錯誤;只能有一個自動列,它必須被定義爲一個鍵「? – Philipp

+0

不可以,因爲我錯過了更多的sql,再次更新,這次它的編程 –