PDO execute returns 1 但没有行受影响?
PDO execute returns 1 but no row affected?
我在使用 PDO 删除方法时遇到了一些奇怪的行为,我希望得到一些原因的答案。出于某种原因,当我执行删除(在本例中 table 为空)时,查询 returns 1。根据文档,如果没有行,它应该是 returning 0被修改。这是代码。
protected function dsn() {
return 'mysql:host=' . $this->host . ';dbname=' . $this->db . ';charset=' . $this->charset;
}
//my PDO attribute options//
protected $options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
];
//I have separate connections for different queries with different permissions
depending on what I need to do//
protected function connectDelete() {
$dsn = $this->dsn();
$this->pdo = new PDO($dsn, $this->userDelete, $this->passDelete, $options);
return $this->pdo;
}
function deleteQuery($query, $values = []) {
$prepare = $this->connectDelete()->prepare($query);
$result = $prepare->execute($values);
return $result;
}
所有相关代码都已完成,下面是查询。
require_once $root.'/classes/userDB.php';
$db = new userDB();
$query = "DELETE FROM table WHERE primaryKey = ? AND user_id = ?";
$values = [$pk_id,$user_id];
$result = $db->deleteQuery($query, $values);
echo $result;
returns 1
我是不是做错了什么?
编辑#1:
所以我尝试 rowCount()
看看结果会是什么,我得到了以下错误。
Fatal error: Call to a member function rowCount() on a non-object...
看来查询失败了?
编辑#2:
这是将 return 受影响的行的新函数。
function deleteQuery($query, $values = []) {
$prepare = $this->connectDelete()->prepare($query);
$prepare->execute($values);
$result = $prepare->rowCount();
return $result;
}
Returns TRUE
on success or FALSE
on failure.
true
输出为字符串变成 1
。这并没有说明有多少行被删除,只是查询成功了(即语法正确并且执行时没有错误)。如果您想知道有多少行受到影响,您正在寻找 rowCount
.
我在使用 PDO 删除方法时遇到了一些奇怪的行为,我希望得到一些原因的答案。出于某种原因,当我执行删除(在本例中 table 为空)时,查询 returns 1。根据文档,如果没有行,它应该是 returning 0被修改。这是代码。
protected function dsn() {
return 'mysql:host=' . $this->host . ';dbname=' . $this->db . ';charset=' . $this->charset;
}
//my PDO attribute options//
protected $options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
];
//I have separate connections for different queries with different permissions
depending on what I need to do//
protected function connectDelete() {
$dsn = $this->dsn();
$this->pdo = new PDO($dsn, $this->userDelete, $this->passDelete, $options);
return $this->pdo;
}
function deleteQuery($query, $values = []) {
$prepare = $this->connectDelete()->prepare($query);
$result = $prepare->execute($values);
return $result;
}
所有相关代码都已完成,下面是查询。
require_once $root.'/classes/userDB.php';
$db = new userDB();
$query = "DELETE FROM table WHERE primaryKey = ? AND user_id = ?";
$values = [$pk_id,$user_id];
$result = $db->deleteQuery($query, $values);
echo $result;
returns 1
我是不是做错了什么?
编辑#1:
所以我尝试 rowCount()
看看结果会是什么,我得到了以下错误。
Fatal error: Call to a member function rowCount() on a non-object...
看来查询失败了?
编辑#2:
这是将 return 受影响的行的新函数。
function deleteQuery($query, $values = []) {
$prepare = $this->connectDelete()->prepare($query);
$prepare->execute($values);
$result = $prepare->rowCount();
return $result;
}
Returns
TRUE
on success orFALSE
on failure.
true
输出为字符串变成 1
。这并没有说明有多少行被删除,只是查询成功了(即语法正确并且执行时没有错误)。如果您想知道有多少行受到影响,您正在寻找 rowCount
.