我有以下准备好的声明,它不会绑定$u
:
$db = 'test';
$dbt = 'accounts';
$u = 'jacob';
$getAccountInfo = $dbh->prepare("SELECT `status`,`pass`,`fail_count`,`tel`,`role` FROM `$db`.`$dbt` WHERE `user`=:user;");
$getAccountInfo->bindParam(':user', $u, PDO::PARAM_STR);
$getAccountInfo->execute();
$accountInfo = $getAccountInfo->fetch(PDO::FETCH_ASSOC);
echo '<p>$getAccountInfo: "';
var_dump($getAccountInfo);
echo '"</p>$accountInfo: "';
var_dump($accountInfo);
echo "\"<p>" . $accountInfo['status'] . "</p>";
它返回:
$getAccountInfo: "object(PDOStatement)#2 (1) { ["queryString"]=> string(109) "SELECT
status
,pass
,fail_count
,tel
,role
FROMtest
.accounts
哪里user
=:用户;“}”$accountInfo:“布尔(假)”
(我试过 bindValue 等)
没有错误消息/异常(但如果我提供正确的数据库连接信息,它会引发错误)
如果我将返回的 sql 复制/粘贴到命令行中并替换:user
为'jacob'
,它就可以正常工作。
编辑:原来问题是脚本使用的帐户没有表的权限accounts
(即使它有select
授权test.*
)。我认为原因是因为accounts
是在我授予该帐户选择权限之后创建的:/