Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO MYSQL insert语句不工作(未给出错误)_Php_Mysql_Pdo - Fatal编程技术网

Php PDO MYSQL insert语句不工作(未给出错误)

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['

我有下面的MySQL insert语句,代码运行,PDO不会报告任何错误消息,但是第一个语句不会将数据保存到数据库中(地址表中没有新行),而第二个语句则可以

$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,好的。那么,您是否按照正确的顺序执行了命令?您能否添加
描述地址的结果