Php PDO,类方法返回true,而参数中的列名错误?
Posted
技术标签:
【中文标题】Php PDO,类方法返回true,而参数中的列名错误?【英文标题】:Php PDO, class method return true while the column name in the param is wrong? 【发布时间】:2014-08-27 14:23:08 【问题描述】:我创建了具有以下两种方法的类: 连接方法如下:
private function connect()
try
$this->con = new PDO("mysql:host=$this->host;dbname=$this->db_name;charset=utf8", $this->db_user, $this->db_pass);
$this->con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->con->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$this->con->setAttribute(PDO::ATTR_EMULATE_PREPARES, TRUE);
catch(PDOException $ex)
return $ex->getMessage();
这里是插入、更新、删除和查找表中记录的方法:
public function dbQuery($sql,$bindVars=array())
try
$this->connect();
$statement = $this->con->prepare($sql);
$statement->execute($bindVars);
if($statement->rowCount() > 0)
return true;
else
return false;
catch(PDOException $exc)
return $exc->getMessage();
$this->con = null;
现在我正在使用这种方式(例如)将记录插入到我的表中:
1- 填充可以绑定到 dbQuery 方法的数组;
$bindInputInsert = array(
':empSno'=>$empSno,
':fromCourt'=>$fromCourt,
':toCourt'=>$toCourt,
':transferDate'=>$transferDate,
':transferFromDate'=>$transferFromDate,
':causeOfTransfer'=>$causeOfTransfer,
':departmentDetails'=>$departmentDetails,
':orderNo'=>$orderNo
);
2- 现在准备这样的插入查询:
$sqlInsert = "INSERT INTO empoffices (
empSno,
fromCourt,
toCourt,
transferDate,
transferFromDate,
causeOfTransfer,
departmentDetails,
orderNo
)
VALUES(
:empSno,
:fromCourt,
:toCourt,
:transferDate,
:transferFromDate,
:causeOfTransfer,
:departmentDetails,
:orderNo
)";
3- 将查询发送到 dbQuery 方法并插入测试记录?
if($db->dbQuery($sqlInsert,$bindInputInsert))
echo($method->sucMsg("Info: - "," Record saved successfully"));
else
echo($method->errorMsg("Error: - ","Record not saved"));
//end else insert()
我面临的问题: 上面的方法对我来说很好,但是如果我在查询中拼错了一个列名,它不会将记录插入到表中(这是正确的),但它仍然返回 true ???虽然它应该返回假?
我做错了什么我不明白,请帮助我。提前致谢。
【问题讨论】:
【参考方案1】:您的方法dbQuery
仅在有效查询结果为rowCount() <= 0
时才返回false。当您发送无效查询时,例如列名拼写错误的查询,它会返回异常,特别是 $exc->getMessage();
,它不是 false
。
试试这样的方法:
if ($db->dbQuery($sqlInsert,$bindInputInsert) === true)
// success
...
当且仅当dbQuery
准确返回true
- 而不是false
或 $exc->getMessage();
,这将评估为真。
【讨论】:
是的,你是对的,我真的忽略了 $exc->getMessage(),如果我用 false 替换 $exc->getMessage(),我认为它应该对我有用吗?不是吗? @AbdulRahman 是的,用 false 替换$exc->getMessage()
应该可以解决问题……但是您会丢失异常消息,因此您可能需要先回显该消息,然后返回 false。
感谢您的宝贵提示:我已经像这样替换了 catch 块中的代码:\n catch(.....) $this->tempVar = $exc->getMessage() ; //出于调试目的,仅返回 false; \n 现在,如果我需要显示错误消息,我将在 echo 函数中调用 $obj->tempVar。以上是关于Php PDO,类方法返回true,而参数中的列名错误?的主要内容,如果未能解决你的问题,请参考以下文章