我有以下PHP代码做一个非常简单的选择到表中。PHP:PDOStatement简单MySQL选择不起作用
$statement = $db->prepare("SELECT * FROM account WHERE fbid = :fbid");
$statement->bindParam(":fbid",$uid, PDO::PARAM_STR,45);
$out = $statement->execute();
print_r($out) // 1;
//$out = $statement->execute(array(':fbid' => $uid)); // also doesn't work
$row = $statement->fetch();
$out
是真实的(成功),但$row
为空。
编辑:
$statement->debugDumpParams();
输出
SQL: [40] SELECT * FROM account WHERE fbid = :fbid Params: 1 Key: Name: [5] :fbid paramno=-1 name=[5] ":fbid" is_param=1 param_type=2
如果我修改代码如下:
$statement = $db->prepare("SELECT * FROM account WHERE fbid = $uid");
$out = $statement->execute();
$row = $statement->fetch();
$row
包含我期望的记录。
我不知所措。我正在使用PDO :: prepare(),bindParams()等来防止SQL注入(可能我错了)。
编辑: 在我的例子中,$ uid是一个数字字符串(即只包含数字的字符串)。在数据库中,列类型为VARCHAR(45)
编辑:
如果我从VARCHAR(45),以BIGINT更改数据库类型,这两个查询工作。如果我再次将数据库类型中的类型更改回VARCHAR(45),它将起作用。那么是什么给了?
请halp。
你可以张贴的print_r($出)的'结果;' – Jayrox 2010-03-24 04:23:21
@jayrox:这是1 – Alan 2010-03-24 04:25:33
确定,对妈和笑声尝试没有',PDO :: PARAM_STR,45'在bindParam – Jayrox 2010-03-24 04:34:31