Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
Mysql PDO->;exec返回int(0)或Null_Mysql_Pdo - Fatal编程技术网

Mysql PDO->;exec返回int(0)或Null

Mysql PDO->;exec返回int(0)或Null,mysql,pdo,Mysql,Pdo,我试图确定是否在数据库中创建了用户。PDO正在返回int(0)或null 代码如下所示: if( $dbh->exec( "CREATE USER 'test'@'%' IDENTIFIED BY 'password'" ) ) echo "User Created"; else echo "User could not be created"; 如果用户已创建,它将输出“无法创建用户”。如果用户已经在数据库中,那么脚本将不会输出任何内容 但是,改为 if( $dbh-&

我试图确定是否在数据库中创建了用户。PDO正在返回int(0)或null

代码如下所示:

if( $dbh->exec( "CREATE USER 'test'@'%' IDENTIFIED BY 'password'" ) )
    echo "User Created";
else
    echo "User could not be created";
如果用户已创建,它将输出“无法创建用户”。如果用户已经在数据库中,那么脚本将不会输出任何内容

但是,改为

if( $dbh->exec( "CREATE USER 'test'@'%' IDENTIFIED BY 'password'" ) === 0 )
    echo "User Created";
else
    echo "User could not be created";
如果用户已创建,则将导致“用户已创建”,如果用户已在数据库中创建,则不会输出

为什么会这样?或者更重要的是,如何检查用户是否已成功创建?我是否应该依赖于成功时返回int(0),失败时返回NULL?由于没有文档记录,我担心这样做可能会导致将来的问题

谢谢


--我之所以需要检查是否创建了用户,是因为我正在创建用户和数据库。如果无法创建用户,我不想创建数据库。此外,如果脚本遇到问题,无法完成任务,我希望撤消以前执行的任务。不幸的是,PDO事务不能用于创建新用户和数据库,它们总是自动提交。

该函数返回受影响的行数(int),而不是取决于语句执行方式的布尔值。例如,返回值
0
表示没有变化。

在PHP中,int(0)和NULL实际上是不同的。int(0)的值显式表示在语句成功执行时没有更改的行。但是,NULL值可能表示查询有问题。谢谢。因此它返回int(0),因为没有“行”受到影响,但是,查询成功。因为查询不成功而返回NULL?完全正确。当添加新行时,应该注意到实际上没有(现有)行受到影响。刚刚意识到如果用户已经存在,它会抛出异常——这是完美的。这就是为什么没有执行else语句。请快速重述下面的答案。PDO在成功时返回int(0),因为事件成功,但数据库中的行未受影响。PDO在失败时抛出异常,这就是为什么没有执行else语句。更好的解决方案:尝试{$dbh->exec(“创建用户'测试'@''由'密码'标识”);}catch(异常$e)//或PDOException{}(显然,这里也要准备语句。为了简洁起见,我没有使用它们)