我们走了。我仍然是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; )
没有返回任何值。无论我走多远,我都会得到一个空阵列。语法似乎正确,但我错过了什么吗?
答案 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 );