我有以下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