在串联工作的情况下,参数绑定失败

时间:2009-10-26 14:58:23

标签: php sqlite pdo parameterbinding

我正在尝试使用pdo:SELECT * FROM my_table WHERE name=?.

从php执行以下sql

当我这样做时:

$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();  

我得到了我需要的那一行。

列'name'是VARCHAR(32)。这个错误只发生在字符串上。当绑定参数是一个sql INTEGER时,一切都像它应该的那样工作。

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

2 个答案:

答案 0 :(得分:0)

这个怎么样?

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

答案 1 :(得分:0)

这两项都应该有效:

不使用绑定

  

$ sql =“SELECT * FROM my__table WHERE name =?”;
  $ stmt = $ dbconn-> prepare($ sql);
  $ stmt->执行(阵列($ _ POST [ '名称']));

使用命名参数

  

$ sql =“SELECT * FROM my__table WHERE name =:name”;
  $ stmt = $ dbconn-> prepare($ sql);
  $ stmt-> bindParam(':name',$ _POST ['name'],PDO :: PARAM_STR);
  $ stmt->执行(阵列($ _ POST [ '名称']));