Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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 rowCount(),为什么它不适用于create user?有选择吗?_Php_Mysql_Createuser - Fatal编程技术网

Php rowCount(),为什么它不适用于create user?有选择吗?

Php rowCount(),为什么它不适用于create user?有选择吗?,php,mysql,createuser,Php,Mysql,Createuser,在mysql中创建新用户为: $query = $dbconnection->prepare("CREATE USER 'john'@'localhost' IDENTIFIED BY 'mypass'"); $query->execute(); $counts = $query->rowCount(); return $counts; 通常在其他查询中,我使用rowCount()检查查询是否成功。如果rowCount()>1,则查询成功。但我意识到这在创建用户方面不起作用。

在mysql中创建新用户为:

$query = $dbconnection->prepare("CREATE USER 'john'@'localhost' IDENTIFIED BY 'mypass'");
$query->execute();
$counts = $query->rowCount();
return $counts;
通常在其他查询中,我使用rowCount()检查查询是否成功。如果rowCount()>1,则查询成功。但我意识到这在创建用户方面不起作用。
在本例中,虽然创建了user,但rowCount()的结果仍然是值0。是否有任何方法可以检查此查询是否成功

@GHOST comment中的更新: 此查询返回值1,以确认插入了数据或某行受到影响

     $query = $this->link->prepare("INSERT INTO agent(uname,password,) VALUES(?,?");    
    $values = array($uname,$pw);
    $query->execute($values);
    $counts=$query->rowCount();
    return $counts;

我正在寻找某种方法,以同样的方式检查上一个案例。

谢谢您提供的附加代码

$query->execute()
如果查询成功,则返回True;如果执行查询时出错,则返回False

if !($query->execute() {
    echo "Ouch, there was an error.";
}

科林的回答对于标准PDO错误模式是正确的

这与其说是一个答案,不如说是一个冗长的注释,但重要的是要注意
rowCount()
execute()
的返回值的差异,尤其是对于更新和删除

更新和删除时,可以使用
rowCount()
0
,但可以使用
execute()
true
。这意味着查询成功,但没有与提供的约束匹配的行(通常是
,其中


因此,在执行更新和删除时,应该同时检查两个返回值。一个用于确保查询成功,另一个用于检查行是否受到影响。如果查询失败,检查这两个选项将使调试更容易,并防止在
rowCount()
上出现致命错误。

我们需要看到比这更多的代码吗?这仅仅是一个sql查询吗?我认为行数不能应用于数据定义。这并不意味着什么sense@Ghost,我希望更新会使它更清晰。@ColinSchoen,添加了更多代码。现在应该很清楚了。您可以检查errorCode()方法的返回。如果此方法使用了异常errmode,您可以检查execute@Deep当然,但任何事情都是如此。如果抛出异常,也无法访问rowCount()。如果在PDO上使用异常模式,则应该使用
try-catch
块。@Devon是,然后呢?您确定作者未使用单个全局try-catch吗?也许明天就可以使用它?@Deep,没有任何证据表明异常不是PDO的默认值,因此我认为假设特别是考虑到作者建议他依赖返回值来查看查询是否成功是不公平的,因此假设与您所说的相反是公平的,因为对于PDO异常,如果查询失败,它将永远无法返回。@Devon好的,好的-这是我的偏执狂模式)。尽管如此,我一直在寻找另一种解决方案来检查“创建用户”查询是否成功,但科林的答案可能是最好的解决方案。到现在为止,一直都还不错。答案被接受。