Php PDO MYSQL insert语句不工作(未给出错误)
我有下面的MySQL insert语句,代码运行,PDO不会报告任何错误消息,但是第一个语句不会将数据保存到数据库中(地址表中没有新行),而第二个语句则可以Php PDO MYSQL insert语句不工作(未给出错误),php,mysql,pdo,Php,Mysql,Pdo,我有下面的MySQL insert语句,代码运行,PDO不会报告任何错误消息,但是第一个语句不会将数据保存到数据库中(地址表中没有新行),而第二个语句则可以 $sql=$dbh->prepare("INSERT INTO `Address` (`ID`, `Street`, `Street2`, `Town`, `County`, `Postcode`) VALUES (NULL, ?,?,?,?,?)"); $sql->execute(array($_POST['
$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`);
描述地址的结果代码>
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
我看不出代码有什么问题?您正在指定NULL
作为ID
的值,但它是非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)
最后一次猜测:您的$\u帖子中缺少参数
-数组/访问数组的索引错误
$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;
谢谢,我实际上遗漏了一些SQL,ID设置为自动递增,请查看更新DN您没有收到类似“[Err]1075-表定义不正确;只能有一个自动列,必须定义为键”的错误吗?没有,因为我遗漏了更多SQL,再次更新,这次是tactHaha,好的。那么,您是否按照正确的顺序执行了命令?您能否添加描述地址的结果你的问题是什么?为了确保您可以转储$\u POST-array以检查您是否拥有所需的所有数据以及是否正确访问了这些数据?