У меня следующий код PHP, делающий очень простое выделение в таблицу.
$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
равно нулю.
EDIT:
$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-инъекций (возможно, я ошибаюсь).
EDIT:
В моем примере $ uid является числовой строкой (то есть строкой, содержащей только цифры). В базе данных тип столбца VARCHAR (45)
EDIT:
Если я изменю тип базы данных с VARCHAR (45) на BIGINT, оба запроса будут работать. Если я снова изменю тип в типе базы данных обратно на VARCHAR (45), это сработает. Так что же дает
Пожалуйста, помогите.