Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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 失败或成功查询始终返回true_Php_Mysql_Boolean - Fatal编程技术网

Php 失败或成功查询始终返回true

Php 失败或成功查询始终返回true,php,mysql,boolean,Php,Mysql,Boolean,代码: 这段代码是用来生成一些查询的 即使我将表名更改为数据库中不存在的表,这些查询始终返回true,而它应该返回false 您能帮我解决这个问题吗?可能是这个错误造成的: 它说,如果第一条语句有效,pdo将不会返回错误。并启动交易;总是有效的 据报道,该漏洞在PHP的verison 5.6.7版本之前未修复 不确定这个bug是否也会影响return语句,因为它是关于缺少异常抛出的。但是应该很容易测试:在任何其他语句之前添加一个无效语句,并查看返回值是否为false 对于pdo事务,您还应该查看

代码:

这段代码是用来生成一些查询的

即使我将表名更改为数据库中不存在的表,这些查询始终返回true,而它应该返回false


您能帮我解决这个问题吗?

可能是这个错误造成的:

它说,如果第一条语句有效,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
));