Php 失败或成功查询始终返回true
代码: 这段代码是用来生成一些查询的 即使我将表名更改为数据库中不存在的表,这些查询始终返回true,而它应该返回falsePhp 失败或成功查询始终返回true,php,mysql,boolean,Php,Mysql,Boolean,代码: 这段代码是用来生成一些查询的 即使我将表名更改为数据库中不存在的表,这些查询始终返回true,而它应该返回false 您能帮我解决这个问题吗?可能是这个错误造成的: 它说,如果第一条语句有效,pdo将不会返回错误。并启动交易;总是有效的 据报道,该漏洞在PHP的verison 5.6.7版本之前未修复 不确定这个bug是否也会影响return语句,因为它是关于缺少异常抛出的。但是应该很容易测试:在任何其他语句之前添加一个无效语句,并查看返回值是否为false 对于pdo事务,您还应该查看
您能帮我解决这个问题吗?可能是这个错误造成的: 它说,如果第一条语句有效,pdo将不会返回错误。并启动交易;总是有效的 据报道,该漏洞在PHP的verison 5.6.7版本之前未修复 不确定这个bug是否也会影响return语句,因为它是关于缺少异常抛出的。但是应该很容易测试:在任何其他语句之前添加一个无效语句,并查看返回值是否为false 对于pdo事务,您还应该查看
$pdo->beginTransaction();
$pdo->commit();
$pdo->rollback();
为了避免上述错误,请将查询填充到数组中,并按如下方式运行:
function runQueries($pdo, $queries){
try{
$pdo->beginTransaction();
foreach($queries as $q){
$pdo->exec($q);
}
$pdo->commit();
return true;
}catch (PDOException $e){
$pdo->rollback();
return false;
}
}
ofc。您需要使用配置PDO来抛出执行选项
$pdo = new PDO('mysql:host=localhost;dbname=someDB', 'username', 'password', array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
您不应该在一个查询调用中填充多个查询语句。而且你的代码天生就是活泼的。你不应该使用选择。。。获取最后生成的id。有insert_id。不能保证其他人不会在你背后插入记录。这就是我创建事务的原因,因此在事务完成之前,其他人无法插入。我使用的是PDO而不是MYSQLImake确保您的事务设置实际上是在重复读取模式下工作的,然后…您使用的是PDO,但您的SQL是完全可以注入的…@MarcB,我如何确保这一点?我想我必须在$q->execute之前先运行查询函数;对吗?@MohamedSalah该示例在pdo对象上使用exec,而不是在pdo语句上执行。适应您的需要。您能告诉我如何声明$queries数组吗?
$pdo = new PDO('mysql:host=localhost;dbname=someDB', 'username', 'password', array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));