2016-07-21 10 views
1

以下のMySQL挿入文があり、コードが実行され、PDOはエラーメッセージを報告しませんが、アドレステーブルの行)、2番目のファインは罰金です。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

IDの値としてNULLを指定していますが、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) 

あなたのコードを実行:

mysql> SELECT * FROM Address; 
+----+--------+---------+------+--------+----------+ 
| ID | Street | Street2 | Town | County | Postcode | 
+----+--------+---------+------+--------+----------+ 
| 3 | street | street2 | town | county | postcode | 
+----+--------+---------+------+--------+----------+ 
1 row in set (0.00 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" 

確認を$_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を見逃してしまったので、もう一度、今度は更新しました。 –

関連する問題