Php 一个稍微复杂的MySQL标准查询和它应该如何使用PDO之间有什么区别?

Php 一个稍微复杂的MySQL标准查询和它应该如何使用PDO之间有什么区别?,php,mysql,pdo,prepared-statement,Php,Mysql,Pdo,Prepared Statement,我只使用mysqls默认查询得到这个查询 if(!is_empty($_GET['cidade'])){ $cidade = safe_string_escape($_GET['cidade']); $cidadestr="AND cidade LIKE '%$cidade'"; } else $cidadestr=""; if(!is_empty($_GET['dormitorios'])){ $dormitorios = $_GET['dormitorios

我只使用mysqls默认查询得到这个查询

if(!is_empty($_GET['cidade'])){
     $cidade = safe_string_escape($_GET['cidade']);
      $cidadestr="AND cidade LIKE '%$cidade'";
}
else $cidadestr="";

if(!is_empty($_GET['dormitorios'])){
     $dormitorios = $_GET['dormitorios'];
      $dormitoriosstr="AND dormitorios = '$dormitorios'";
}
else $dormitoriosstr="";

$busca = "SELECT * FROM imoveis WHERE status = 'Publicado' $cidadestr $dormitoriosstr; 
我将其更改为PDO,如下所示:

if(!is_empty($_GET['cidade'])){
     $cidade = safe_string_escape($_GET['cidade']);
      $cidadestr="AND cidade LIKE '%$cidade'";
}
else $cidadestr="";

if(!is_empty($_GET['dormitorios'])){
     $dormitorios = $_GET['dormitorios'];
      $dormitoriosstr="AND dormitorios = '$dormitorios'";
}
else $dormitoriosstr="";


$busca = "SELECT * FROM imoveis WHERE status = :status :cidadestr :dormitoriosstr;
$buscasql = $conn->prepare($busca);
$buscasql->bindValue(':status', 'Publicado', PDO::PARAM_STR);
$buscasql->bindValue(':cidadestr', $cidadestr, PDO::PARAM_STR);
$buscasql->bindValue(':dormitoriosstr', $dormitoriosstr, PDO::PARAM_STR);
$buscasql->execute() or die(print_r($buscasql->errorInfo()));

它不起作用,我在行计数或类似的事情中什么都没有,所以,我想我做错了,那么,从简单的mysql到PDO的正确方法是什么?有什么帮助吗?

PDO提供了一个抽象层,在可移植环境中非常有用。您还可以根据不同的提供者查询数据,例如Memcached和MySQL,尽管我不确定本机支持什么。但是它提供了极好的上下文支持。

解决了!它是否:

if(!is_empty($_GET['business'])){
     $buscasql.=" AND businessLIKE :business";
}

$buscasql = $conn->prepare($busca);

if(!is_empty($_GET['business'])){
     $business= '%'.safe_string_escape($_GET['business']).'%';
     $buscasql->bindValue(':business', $business, PDO::PARAM_STR);
}

然后把一切都绑起来。。。所以,就像我们过去常说的‘在这里转圈

在使用这样的语句时,您不必手动转义参数,MySQL将为您执行此操作