2016-09-22 129 views
0
try { 
    $dbh = new PDO("mysql:host=$host", $root, $root_password); 
    $dbh->exec("INSERT INTO test (col1, col2, col3) VALUES (test1, test1, test1)") 

    or die(print_r($dbh->errorInfo(), true)); 

    } catch (PDOException $e) { 
     die("DB ERROR: ". $e->getMessage()); 
    } 

我用来打印屏幕上的SQL查询:$sth->debugDumpParams();但我得到的内部500错误如何打印到查询代码[PDO]

我怎样才能打印查询?

+2

读取日志并找出500错误的原因。 –

+0

'$ sth'似乎并不存在,这真的是你正在使用的?哪里? – jeroen

+1

你好再次@jeroen,我更新了问题 – Editor

回答

0

几乎这段代码中的每一行都是错误的。没有$sth从starter获取debugDumpParams。更不用说你正在运行一个完全错误的查询的方式。

这是应该的

$dbh = new PDO("mysql:host=$host", $root, $root_password); 
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$sql = "INSERT INTO test (col1, col2, col3) VALUES (?,?,?)"; 
$sth = $dbh->prepare($sql); 
$sth->execute(['test1', 'test1', 'test1']) 

现在你可以使用任何方法来呼应你的查询,无论是debugDumpParams或简单地echo $ sql中,但也将有很大帮助,因为它会准确地打印您同样你在你的脚本已经:

INSERT INTO test (col1, col2, col3) VALUES (?,?,?) 

然而,我想你需要不是一个查询,但该错误消息,上面的代码将向您提供 - 只要运行它。

请注意,您应该避免此代码中的die()try语句。

+0

谢谢你的回答。您的回应非常不同,因此我更新了问题 – Editor

+0

对于您通过exec()执行的多查询,无法从PDO中获取它。但是,您始终可以将其分配给一个PHP变量,并将该变量回显出来。但是你仍然不需要查询,但是一个很明显的错误信息。 –

+1

我明白谢谢 – Editor