我如何在PDO Prepare中使用通配符?

时间:2013-08-16 15:28:23

标签: php mysql pdo wildcard

我正在使用PDO来访问我的mysql服务器。我的想法是发布/获取我感兴趣的类别和子类别到脚本。如果脚本没有收到任何输入,我希望它使用外卡并获取所有类别/子类别。但是,当两个变量都设置为'%'时,我只接收具有0的行而不是具有1,2,3 ......等的条目作为kat_id和subkat_id。当我不是%kat_id并且$ subkat_id被设置为'%'时,有人可以识别出我做错了什么以及如何更改我的代码以输出所有条目

以下是我的代码,我很高兴能得到所有帮助。

<?PHP 
//header("content-type: application/json"); 
error_reporting(E_ALL);
include("../dbconfig.inc.php"); 
mysql_query('SET CHARACTER SET utf8');

// Ta emot variiabler
if( isset($_GET['kat_id'])) {
$kat_id =  $_GET['kat_id'];
} else { $kat_id =  '%';};

if( isset($_GET['subkat_id'])) {
$subkat_id =  $_GET['subkat_id'];
} else { $subkat_id =  '%';};


$i = 1;


$stmt = $dbh->prepare("SELECT * FROM transaktioner WHERE kat_id = :kategori_id AND subkat_id = :subkategori_id");

// Execute
$stmt->execute( array(

            'kategori_id' => $kat_id,
            'subkategori_id' => $subkat_id,
            )

            );

$result = $stmt->fetchAll();
foreach($result as $row)
{

 $r[$i]= $row;

  $i++;  
}

    var_dump ($r);
    //echo '('. json_encode($r) . ')';  

1 个答案:

答案 0 :(得分:3)

您使用通配符的想法是错误的。无论是实施还是意图。 SQL中的通配符不是以这种方式使用的。

如果未选择任何类别,则根本不需要在查询中添加过滤器。因此,如果没有设置过滤器,只需

SELECT * FROM transaktioner

必须是,没有WHERE子句。

只是一个注释

foreach($result as $row)
{

 $r[$i]= $row;

  $i++;  
}

是一个非常有趣的代码。 $result 已经包含您的数据,并且无法在循环中复制它。