【问题标题】:Parameterized queries in PHP with phpmyadmin connexion使用 phpmyadmin 连接的 PHP 中的参数化查询
【发布时间】:2020-11-06 16:49:52
【问题描述】:

我正在尝试在网站上展示某个类别中的产品。如果我手动输入我的类别的数量,我就可以展示一个类别的产品。但是,我不知道如何通过访问我的数据库中的数据来显示特定类别的产品,而不是在我的查询之前手动放置类别的 id,而是通过访问与 category_id 相关的类别表的 id我的产品表。

<?php

function muestraProd($DB)
{
    $productos=NULL;
    $categoria_id = 1;

    $sql = 'SELECT * FROM producto WHERE categoria_id = ?';
    
    $stmt = $DB->prepare($sql);
    $params = [$categoria_id,];
    $stmt->execute($params);
    $productos = $stmt->fetchAll();
    return $productos;
}

【问题讨论】:

  • 语法错误:[$categoria_id,];,改为[$categoria_id];
  • @Illya,从 PHP 7.2 开始,数组中允​​许使用尾随逗号,因此这不是语法错误。
  • 不要将 PHP MyAdmin(用 PHP 编写的数据库管理 GUI)与 MySQL / MariaDB(实际数据库服务器)混淆
  • 这是 PDO 还是特定的驱动程序,例如 mysqli?因为您使用的是问号,所以它似乎是后者。如果是这样,您需要致电$stmt-&gt;bind_param('i', $categoria_id)。但是,如果您使用 PDO,则需要切换占位符并执行语法为 :name
  • @ChrisHaas 我使用 PDO

标签: php model-view-controller


【解决方案1】:

如上面的 cmets 所述,您调整函数以接受类别作为函数的参数,然后您可以调用它并在脚本中的任何位置使用它:

<?php
function muestraProd($id, $DB)
{
    if(empty($id))
        return null;
    $stmt = $DB->prepare('SELECT * FROM producto WHERE categoria_id = ?');
    $stmt->execute([$id]);
    return $stmt->fetchAll();
}

现在您的函数接受id 作为参数,您可以在任何地方使用它,只要您在脚本中包含此函数。提交表单时:

# This will insert the id assuming it is submitted in a form
$prod = muestraProd(($_POST['id'])?? false, $DB);

如果在查询中(如 cmets 中所述)https://www.emample.com?id=1

$prod = muestraProd(($_GET['id'])?? false, $DB);

如果您愿意,您可以手动操作:

$prod = muestraProd(1, $DB);

这些是最常见的方式。

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 2016-05-19
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多