有没有办法在预准备语句上调用PDOStatement :: execute()时获取原始SQL字符串?出于调试目的,这将非常有用.
将表单的命名参数传递:name
给时PDOStatement::bindParam()
,无论是否使用了前导冒号,它似乎都有效.
即:这个:
$statement->bindParam(':name', $var);
Run Code Online (Sandbox Code Playgroud)
或这个:
$statement->bindParam('name', $var);
Run Code Online (Sandbox Code Playgroud)
似乎工作.
这是文档 PDOStatement::bindParam()
参数
参数标识符.对于使用命名占位符的预准备语句,这将是以下形式的参数名称:name.对于使用问号占位符的预准备语句,这将是参数的1索引位置.
这是否意味着结肠可以被取消?
我想知道使用PHP PDO执行什么查询.我有:
<?php
try {
$DBH = new PDO("mysql:host=localhost;dbname=mytable", 'myuser', 'mypass');
}
catch(PDOException $e) {
echo $e->getMessage();
}
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$STH = $DBH->("INSERT INTO mytable (column1, column2, column3 /* etc...*/) value (:column1, :column2, :column3 /* etc...*/)");
$STH->bindParam(':column1', $column1);
$STH->bindParam(':column2', $column2);
$STH->bindParam(':column3', $column3);
/* etc...*/
$STH->execute();
// what is my query?
Run Code Online (Sandbox Code Playgroud)
我想得到类似的东西:
INSERT INTO mytable (column1, column2, column3) value ('my first column', 32, 'some text')
Run Code Online (Sandbox Code Playgroud)
可能吗?谢谢
可能重复:
PDO准备的声明
我确定答案很简单,但我似乎无法找到它.
我正在使用PDO(PHP数据对象)对MySQL数据库运行查询,并且发现在对数据库执行之前显示准备好的查询很有用.
有没有办法做到这一点?例如:
$query = 'SELECT Id, Name, Comment FROM Users WHERE Id = :id';
$pdoStatement = $db->prepare($query);
$pdoStatement->bindValue(':id', $id);
// How can I view the actual statement that will be executed, showing the real
// value that will be used in place of ':id'
$pdoStatement->execute();
Run Code Online (Sandbox Code Playgroud)