gpt4 book ai didi

mysql - 无效的 PDO 查询不返回错误

转载 作者:可可西里 更新时间:2023-11-01 06:29:16 26 4
gpt4 key购买 nike

下面的第二个 SQL 语句在 phpMyAdmin 中返回一个错误:

SET @num=2000040;
INSERT INTO artikel( artikel_nr, lieferant_nr, bezeichnung_1, bezeichnung_1 )
SELECT @num := @num +1 AS anum, 70338, f2, f3
FROM import
WHERE id >1

MySQL 说:

#1110 - Column 'bezeichnung_1' specified twice

全部正确。但是当我使用这个函数在 Symfony 1.4 中运行查询时:

// run sql query
// http://erisds.co.uk/symfony/snippet-creating-debugging-complex-sql-queries-in-symfony
// http://stackoverflow.com/questions/5434702/php-quick-refactoring
// param $sql: the query to run
// param $silent: bool if errors should be ignored
// throws: pdo error info if statement failed and $silent=false
// returns: pdo-statement (use for looping over result rows and error messages)
public static function runQuery($sql, $silent=false)
{
$conn = Propel::getConnection();
$pdo_statement = $conn->prepare($sql);

$error = null;
try
{
$pdo_statement->execute();
}
catch (Exception $e)
{
$error = $e->getMessage();
}

if ( !$error )
{
$pdo_error = $pdo_statement->errorInfo();
$error = $pdo_error[2];
}
if ( !$silent && $error ) throw new Exception($error);

return $pdo_statement;
}

没有抛出错误。两条SQL语句相互依赖,必须同时提交。错误查询是根据用户输入构建的。我需要找回那个错误,否则我无法判断数据库是否已更改,也无法将这件事告诉用户。

你知道为什么PDO不提示invalid statement,如果不能提示,如何获取成功/失败信息?

顺便说一句,如果没有重复的列,查询会更新数据库。

这是 PDOStatement 类的链接:http://www.php.net/manual/en/class.pdostatement.php

最佳答案

这是预期的行为。由于有两个语句并且第一个有效,因此您必须使用 nextRowset()

try
{
$pdo_statement->execute();
while ($pdo_statement->nextRowset()) {/* https://bugs.php.net/bug.php?id=61613 */};
}

来源:bugs.php.net/bug.php?id=61613

关于mysql - 无效的 PDO 查询不返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6203503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com