【问题标题】:How do i use wildcards in PDO Prepare?如何在 PDO Prepare 中使用通配符?
【发布时间】:2013-08-16 15:28:23
【问题描述】:

我正在编写一个使用 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) . ')';  

【问题讨论】:

  • 最简单的方法是直接省略子句。
  • ^ 是的 - 使用该代码实际尝试的内容更像是 WHERE kat_id = '%',我猜这不是预期的行为。
  • % 表达式适用于 like 子句,所以是的。
  • 我让它与“喜欢”一起使用。当然,如果两者都设置为通配符,这是一个愚蠢的说法,但大多数时候 kat_id 将被分配一个数字,但同时我希望能够显示所有子猫。我也希望有可能做相反的事情,只看一个特定的 subkat。

标签: php mysql pdo wildcard


【解决方案1】:

您使用通配符的想法是错误的。无论是在执行上,还是在意图上。 SQL 中的通配符不以这种方式使用。

当没有选择类别时,根本不需要在查询中添加过滤器。因此,没有设置过滤器,只需

SELECT * FROM transaktioner

它必须是,没有 WHERE 子句。

只是一个注释

foreach($result as $row)
{

 $r[$i]= $row;

  $i++;  
}

是一段非常有趣的代码。 $result已经包含了你的数据,循环复制也没用。

【讨论】:

  • 我同意这种情况,我不想过滤任何内容,但可以说我希望类别为 3,并且我想查看第 3 个类别中的所有子类别?您是否建议我通过在不同的 if 语句中给出整个“准备语句”来解决这个问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-12
  • 2013-04-21
  • 1970-01-01
  • 2011-11-23
  • 2013-06-22
  • 2018-01-17
  • 1970-01-01
相关资源
最近更新 更多