有人能解释为什么吗

$sql->execute($params);

返回FALSE,而

print $pdo->errorCode();
print_r($pdo->errorInfo());

两者都返回SQLSTATE 00000,这意味着根据文档显示成功了吗?它是INSERT,实际上没有向数据库中插入任何内容.那么,为什么我会收到来自SQLSTATE的成功消息呢?


如果有帮助,这是代码...

$sql = $pdo->prepare("
        INSERT INTO user (
            username, fname, pass, salt, email,
            loc_id_home, country_id_home, region_id_home,
            cont_id_home, timestamp_reg, timestamp_upd, timestamp_lastonline, 
            online_status, gender, birthdate
            )
        VALUES (
            :username,:fname,:pass,:random_salt,:email,
            :loc_id_home,:country_id_home,:region_id_home,
            :cont_id_home,'".time()."','".time()."','".time()."',
            1,:gender,:birthdate)
        ");

$params=array(
    ':username'=>$username,
    ':fname'=>$fname,
    ':pass'=>$pass,
    ':random_salt'=>$random_salt,
    ':email'=>$email,
    ':loc_id_home'=>$loc_id_home,
    ':country_id_home'=>$country,
    ':region_id_home'=>$region,
    ':cont_id_home'=>$continent,
    ':gender'=>$gender,
    ':birthdate'=>$birthdate
);  

$sql->execute($params);

print $pdo->errorCode();
print_r($pdo->errorInfo());

推荐答案

这是因为$pdo->errorInfo()指的是最后一条成功执行的语句.由于$sql->execute()返回False,因此它不能引用该语句(不是引用Nothing,就是引用前面查询).

至于为什么$sql->execute()返回错误,我不知道...$params数组或数据库连接有问题.

pdo::errorCode-获取与数据库句柄上的最后一个操作相关联的SQLSTATE

注意:PHP手册(http://php.net/manual/en/pdo.errorinfo.php)没有确切定义"数据库句柄上的最后一次操作"是什么意思,但是如果绑定参数有问题,该错误就会发生在PDO内部,而不会与数据库进行任何交互.可以肯定地说,如果$pdo->execute()返回true,则$pdo->errorInfo()是有效的.如果$pdo->execute()返回false,则文档中没有明确说明$pdo->errorInfo()的行为.如果我没记错的话,EXECUTE返回true,即使MySQL返回错误,如果没有执行任何操作,则返回false.因为文档不是特定的,所以它可能是特定于数据库驱动程序的.

此答案反映了截至2012年9月 compose 时的实际经验.正如一位用户所指出的那样,文档没有明确重申这一解释.它也可能只反映特定的数据库驱动程序实现,但如果$pdo->execute()返回true,则$pdo->errorInfo()是有效的,这一点应该总是正确的.

您可能还希望在连接序列中设置PDO::ERRMODE_EXCEPTION.异常处理使得无需判断和查询错误.

$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

Database相关问答推荐

Mongo DB使用一对多关系离开JOIN

KUST查询指定时间跨度内里程表&值的差值,并将其滚动到0

DBMS_RANDOM 是否默认安装?

华为Appcube中的对象字段类型

PostgreSQL Clob 数据类型

在 postgresql 中将列从字符串更改为字符串数组

如何验证 SQLAlchemy ORM 中的列数据类型?

库存数据库的最佳 struct

如何在 MongoDB 和 PostgreSQL for GIS 之间进行 Select ?

数据库模式中的多对多关系表是否有正式名称?

Sitecore - 将项目从 Web 移动到 Master?

PHP 和 MySQL Select 单个值

MySQL 错误 - #1062 - Duplicate entry ' ' for key 2

SQL - 如何使用 MS SQL 2008 R2 备份数据库并导出为 MDF 文件

SQL 查询 - 如何按 null 或不为 null 进行过滤

如何在 SQL Server 中创建数据库的别名

SQL Server Express LocalDB 可以远程连接吗?

XML、CSV 或数据库格式的 ICD-9 代码列表

SQLite 数据库方案作为实体关系模型

从 SQLAlchemy 中的文件执行 SQL