PHP PDO故障排除准备语句绑定

时间:2012-06-18 21:56:44

标签: php pdo

我们走了。我仍然是PHP的新手,我正在尝试学习PDO。我想弄明白为什么

$validStartYear=-1;
echo $listString; //$listString = 'WHERE a regexp "Nissan"'
$queryToPrep='SELECT a FROM b WHERE a regexp "Nissan" ORDER BY start_year asc LIMIT 1;';
$query = $newMysql->prepare($queryToPrep);
$query->execute();
echo '<br/><br/>';
print_r($query);
echo '<br/>';
$row=$query->fetch();
echo $row[0],'<br/>';

输出

a regexp "Nissan"

PDOStatement Object ( [queryString] => SELECT a FROM b WHERE a regexp "Nissan" ORDER BY start_year asc LIMIT 1; )
1971

,而

$prepAgain='SELECT a FROM b WHERE ? ORDER BY a asc LIMIT 1;';
$query2= $newMysql->prepare($prepAgain);
$query2->bindParam(1, $listString, PDO::PARAM_STR);
$query2->execute();
echo '<br/>';
print_r($query2);
echo '<br/>';
$row2=$query2->fetch();
echo $row2[0];

输出

PDOStatement Object ( [queryString] => SELECT start_year FROM engine_kits WHERE ? ORDER BY start_year asc LIMIT 1; ) 

没有返回任何值。无论我走多远,我都会得到一个空阵列。语法似乎正确,但我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

您只能通过PDO绑定实际值。您的第一个代码块有效,因为没有任何错误绑定。此外,您通常希望使用bindValue()而不是bindParam()。

尝试这样的事情

$car = 'Nissan'
$sql = 'SELECT a FROM b WHERE a regexp ? ORDER BY a asc LIMIT 1';
$stmnt = $newMysql->prepare( $sql );
$stmnt->bindValue( 1, $car, PDO::PARAM_STR );