如何在phpmyadmin中运行PDO准备的语句(带有命名占位符)


How to run a PDO prepared statement (with named placeholders) in phpmyadmin?

我做这样事情的日子一去不复返了:
WHERE something = '".$query->real_escape_string($your_unsafe_value_here)."'

因此,我已经转向了准备好的语句,但现在我对如何调试一些查询有点困惑。下面是一个PDO准备的使用命名占位符的语句示例。我从在线php手册中得到了这个:

/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
                      FROM fruit
                      WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();

如果我需要对查询进行快速测试,如何在phpmyadmin中运行这样的程序?(…或者有没有另一个mysql GUI可以轻松处理这些类型的查询?)

可以在Toad for MySQL中运行Query。。运行查询时,会弹出一个输入变量

的窗口

您不能直接在phpMyAdmin中运行PDO查询,我也不知道有任何其他程序可以做到这一点。您可以通过将代码从表单写入文件并在后台执行来构建自己的代码。但这不是很安全,因为你可以在那里运行任何东西

对于我的设置,这就是我最终要做的。希望这个解决方案能帮助其他人,不管我的设置细节如何。。。

1)我在my.ini文件中打开了查询日志记录(我使用的是Windows/WAMP):

[mysqld]
log = "C:'wamp'logs'queries.log"

2)我需要告诉PDO模仿准备好的语句(我使用的是Laravel 4.1):

// Before you run the query...
 $pdo = DB::connection()->getPdo();
 $pdo->setAttribute('PDO::ATTR_EMULATE_PREPARES , true);    
// run query here...
// and then die, so it's the last query ran
die();

3)在notepad++中打开查询.log文件,并在notepad++提示时重新加载该文件。复制&将最后一个查询粘贴到phpmyadmin中。现在我可以调试查询了!

我以后可能不得不想出一个更自动化的方法,但现在看来这是可行的。