在 IF 语句中具有多个条件的 PDO MySQL SELECT

Posted

技术标签:

【中文标题】在 IF 语句中具有多个条件的 PDO MySQL SELECT【英文标题】:PDO MySQL SELECT with multiple criteria within an IF statement 【发布时间】:2014-08-19 18:26:51 【问题描述】:

我是新手,希望学习以下内容;

我想用 php 查询 mysql(我的 PDO 连接是 $dbo);

我有一个变量;

$form_category //一个整数 $form_subcategory //一个整数 $form_subcategory2 //文本 $fname //文件名 $form_class // 'create' 是本例中的类 $form_location //pdf存放的目录

我的查询尝试是;

///start query ///

  $quer2 = $dbo->prepare("SELECT form_id,form_description
    FROM form_detail
    WHERE form_name < :form_name AND form_category = :form_category AND form_subcategory = :form_subcategory AND form_subcategory2 = :form_subcategory2");
        $quer2 ->bindParam(':form_id', $form_id);
    $quer2 ->bindParam(':form_name', $fname);
    $quer2 ->bindParam(':form_category', $catid);
    $quer2 ->bindParam(':form_subcategory', $subcatid);
    $quer2 ->bindParam(':form_subcategory2', $subcat2);
    $quer2 ->bindParam(':form_class', $form_class);
    $quer2 ->bindParam(':form_cerfa', $form_cerfa);
    $quer2 ->bindParam(':form_description', $form_description);
    $quer2 ->execute();

   ///End new query ///

我希望从上面的变量中输出 'form_reference' 和 'form_description' 以及表单名称($fname),并将其显示在文件名上带有 href 的表格中; echo "&lt;td colspan=\"3\" rowspan=\"1\" style=\"text-align: center; vertical-align: middle;\"&gt;&lt;a href=".$dir."create/".$fname." target=\"_blank\"&gt;".$fname."&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;";

【问题讨论】:

你面临什么困难。 ? 如果有意义的话,我似乎无法从查询输出中正确构建表。 @Adeel 您希望从数据库中显示result,还是只需要使用这些变量。 ?有点混乱,请清楚。 我希望结果为我构建一个带有 form_id 的 html 表(参考)表单描述和表单名称在单独的单元格中。 【参考方案1】:

这样做,

$quer2 ->execute();
if ($sp->execute())  // Verify that result exist
   

        $result=$quer2->fetch(PDO::FETCH_OBJ);
        $result->closeCursor();

//   Now , Access Form id and description in this way 



    echo "Form id : $result->form_id";
    echo "Form Description : $result->form_description" ; 
       

另一件事,

$quer2 -&gt;bindParam(':form_id', $form_id);

如果它是一个 int 像这样修改它, $quer2 -&gt;bindParam(':form_id', $form_id , PDO::PARAM_INT);

如果是字符串则PDO::PARAM_STR

这是一种很好的做法,可为您提供更高的安全性。

【讨论】:

警告:PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: 无效参数编号:绑定变量的数量与包含 $quer2 的行的标记数量不匹配 -> 执行(); 显然,您绑定的参数与您在查询中放入的占位符不匹配 您已经绑定了这些参数$quer2 -&gt;bindParam(':form_class', $form_class); $quer2 -&gt;bindParam(':form_cerfa', $form_cerfa); $quer2 -&gt;bindParam(':form_description', $form_description);,并且它们没有在您的查询中使用 为该文件名输出的 form_id 不正确? 在你的代码中检查这个WHERE form_name &lt; :form_name,不应该是WHERE form_name = :form_name

以上是关于在 IF 语句中具有多个条件的 PDO MySQL SELECT的主要内容,如果未能解决你的问题,请参考以下文章

具有多个条件的 if 语句

为啥 PDO 不允许具有相同名称的多个占位符?

mysql 多个条件的删除一条记录的语句

mysql语句where条件中的是啥意思

试图弄清楚如何将具有多个条件的长三元运算符转换为长if语句

MySQL PDO INSERT ... SELECT IF 语句不起作用