我正试图在一个依赖于对象属性的脚本中构建一个查询,以便检索正确的信息。我有这个:
$query = "SELECT fields FROM table WHERE fieldA = $this->x";
//Processing of results here
我以前见过这样的查询与字符串变量一起使用,但我不确定如果您使用的是一个已知具有数值的变量,并且该值的相应列声明为整数或十进制,则规则是否不同。我需要在$this->x
周围加上单引号吗?
使用PDO来做到这一点:
$user = "username";
$password = "password";
$pdo = new PDO('mysql:host=localhost;dbname=dbname', $user, $pass);
$stmt = $pdo->prepare('SELECT fields FROM table WHERE fieldA = :value');
$stmt->execute(array('value' => $this->x);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
打印结果:
echo '<pre>';
print_r($result);
echo '</pre>';
或者绑定一个值:
$sth->bindValue(':value', $this->x, PDO::PARAM_INT);
有关MySQLi,请参阅:如何防止PHP中的SQL注入?
正如您所说$this->x是数字。我做了一个小测试。它运行良好。
class foo{
public $x;
public function showQuery (){
$this->x = 10;
return "SELECT fields FROM table WHERE fieldA = $this->x";
}
}
$ob = new foo();
echo $ob->showQuery();
输出:
SELECT fields FROM table WHERE fieldA = 10
注意:这取决于您是否希望使用PDO。使用标准字符串查询并使用mysqli数据库处理程序执行它可以接受吗?:是