0

我正在尝试使用 pdo 从 php 执行以下 sql:SELECT * FROM my_table WHERE name=?.

当我这样做时:

$sql = 'SELECT * FROM my__table WHERE name=?' ;  
$stmt = $dbconn->prepare($sql);  
$stmt->bindValue(1, $_POST['name'], PDO::PARAM_STR);  
$stmt->execute();   

我得到一个空的结果集。

当我这样做时:

$sql = 'SELECT * FROM my__table WHERE name=\''.$_POST['name'].'\'' ;  
$stmt = $dbconn->prepare($sql);  
$stmt->execute();  

我得到了我需要的行。

“名称”列是一个 VARCHAR(32)。这个错误只发生在字符串上。当绑定参数是 sql INTEGER 时,一切都按预期工作。

我在 Ubuntu 上的 Apache 下使用 sqlite3、php 5.2.6。

4

2 回答 2

0

那这个呢?

$sql = "SELECT * FROM my__table WHERE name='?'" ;  
$stmt = $dbconn->prepare($sql);  
$stmt->bindValue(1, $_POST['name'], PDO::PARAM_STR);  
$stmt->execute();
于 2009-10-26T16:12:23.727 回答
0

这两个都应该工作:

不使用绑定

$sql = "SELECT * FROM my__table WHERE name = ?" ;
$stmt = $dbconn->prepare($sql);
$stmt->execute(array($_POST['name']));

使用命名参数

$sql = "SELECT * FROM my__table WHERE name = :name" ;
$stmt = $dbconn->prepare($sql);
$stmt->bindParam(':name', $_POST['name'], PDO::PARAM_STR);
$stmt->execute(array($_POST['name']));

于 2009-10-27T14:02:28.653 回答