php - 使用 PDO 插入记录失败

标签 php mysql sql pdo

我在向数据库中添加记录时遇到了一个小问题。

出于某种原因,它没有将记录添加到数据库中。

我有一个 HTML 表单,并使用 jQuery 将其序列化以用于 AJAX 请求。我知道这是有效的,因为我曾经将它与旧的 mysql 命令一起使用。

这是我在 insert.php 文件中的内容:

$ln=($_POST['lastname']);
$fn=($_POST['firstname']);
$dob=($_POST['dob']);
$un=($_POST['username']);

$a1=($_POST['address1']);
$a2=($_POST['address2']);
$town=($_POST['town']);
$county=($_POST['county']);
$pc=($_POST['postcode']);
$country=($_POST['country']);
$lat=($_POST['lat']);
$lng=($_POST['lng']);

$lp=($_POST['landline']);
$mp=($_POST['mobile']);
$e1=($_POST['email1']);
$e2=($_POST['email2']);

$web=($_POST['web']);
$notes=($_POST['notes']);
$fb=($_POST['fbid']);
$tw=($_POST['twitter']);
$cat=($_POST['cat']);

$it=($_POST['Time']); 
$idate=($_POST['Date']); 
$iip=($_POST['ipaddress']);
$ib=($_POST['browser']);
$ios=($_POST['os']);

这些是表单中使用的已发布值。

然后我有以下查询(我有 5 个不同的查询,因为它们正在写入 5 个表。正如我所说,这适用于旧的 mysql 命令,但不适用于 PDO 命令。

$sqlp = $conn->prepare("INSERT INTO ".PERSON." (lastname, firstname, dob, adbkid) VALUES(:ln, :fn, :dob, :un)");
$sqlp->execute();
$idp = $conn->lastInsertId();

$sqla = $conn->prepare("INSERT INTO ".ADDRESS." (address1, address2, town, county, postcode, country, lat, lng, personID) VALUES (:a1, :a2, :town, :county, :pc, :country, :lat, :lng, :un)");
$sqla->execute();
$ida = $conn->lastInsertId();

$sqlc = $conn->prepare("INSERT INTO ".CONTACT." (landline, mobile, email1, email2, personID) VALUES (:lp, :mp, :e1, :e2, :un)");
$sqlc->execute();
$idc = $conn->lastInsertId();

$sqlm = $conn->prepare("INSERT INTO ".MISC." (web, notes, photo, fbid, twitter, cat, personID) VALUES (:web, :notes, :pic, :fb, :tw, :cat, :un)");
$sqlm->execute();
$idm = $conn->lastInsertId();

$sqlv = $conn->prepare("INSERT INTO ".VARI." (Time, Date, ipaddress, browser, os, personID) VALUES (:it, :idate, :ip, :ib, :ios, :un)"); 
$sqlv->execute();
$idv = $conn->lastInsertId();

$sqlp->bindValue(':ln', $ln);
$sqlp->bindValue(':fn', $fn);
$sqlp->bindValue(':dob', $dob);
$sqlp->bindValue(':un', $un);

$sqla->bindValue(':a1', $a1);
$sqla->bindValue(':a2', $a2);
$sqla->bindValue(':town', $town);
$sqla->bindValue(':county', $county);
$sqla->bindValue(':pc', $pc);
$sqla->bindValue(':country', $country);
$sqla->bindValue(':lat', $lat);
$sqla->bindValue(':lng', $lng);

$sqlc->bindValue(':lp', $lp);
$sqlc->bindValue(':mp', $mp);
$sqlc->bindValue(':e1', $e1);
$sqlc->bindValue(':e2', $e2);

$sqlm ->bindValue(':web', $web);
$sqlm ->bindValue(':notes', $notes);
$sqlm ->bindValue(':pic', $pic);
$sqlm ->bindValue(':fb', $fb);
$sqlm ->bindValue(':tw', $tw);
$sqlm ->bindValue(':cat', $cat);

$sqlv ->bindValue(':it', $it);
$sqlv ->bindValue(':idate', $idate);
$sqlv ->bindValue(':iip', $iip);
$sqlv ->bindValue(':ib', $ib);
$sqlv ->bindValue(':ios', $ios);

我用 try catch 运行了这些程序,看看我是否能弄清楚发生了什么,但我收到以下错误:

"SQLSTATE[HY093]: Invalid parameter number: no parameters were bound"

我已经呼应了每个值中的内容,它与我在表单中输入的内容相对应。

我也在尝试为每个表回显最后插入的 ID,但它并没有回显出来。

我浏览了 Google 和 php.net,从这里和我读到的内容来看,我正在按照他们所说的去做所有事情。

我不知道发生了什么。

如果您有任何建议,我们将非常欢迎。

最佳答案

必须先绑定(bind)参数再执行

即:

$sqlp = $conn->prepare("INSERT INTO ".PERSON." (lastname, firstname, dob, adbkid) VALUES(:ln, :fn, :dob, :un)");
$sqlp->bindValue(':ln', $ln);
$sqlp->bindValue(':fn', $fn);
$sqlp->bindValue(':dob', $dob);
$sqlp->bindValue(':un', $un);
$sqlp->execute();
$idp = $conn->lastInsertId();
...

关于php - 使用 PDO 插入记录失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24716189/

相关文章:

php - 如何使用另一个数组中的键递归地构建关联数组?

php - 如何使用 PHP Composer 定义私有(private)类路径?

php - 如何检查安装的 OpenSSL 版本是否 >= 0.9.8k

javascript - 访问同一页面的php中的Js变量,只是URL中的div标签不同

mysql - 无法更新存储函数/触发器中的表 'transaction',因为它已被调用此存储函数/触发器的语句使用

mySQL 在 1000A 和 2000A 之间选择

php - 用户注册和邮箱激活

php - 选择、编辑数据,然后将数据插入新数据库

sql - Postgres 从宽列式设计到键值构建复杂的 JSON 对象

sql - 任何 RDBMS 技术的通用语言