繁体   English   中英

如何在PHP中缩写MySQL查询?

[英]How to abbreviate MySQL queries in PHP?

我有一个页面,需要进行六个几乎相同的查询,它们之间的唯一区别是“类别”的值:

$query = "SELECT * FROM table_name WHERE category="CATEGORY1";

我不想为每个不同的类别写出六个不同的$ query变量($ query1,$ query2等),而是想简化一下,以便每次实例化$ query时都可以将类别作为变量传递,如下所示:

$query = "SELECT * FROM table_name WHERE category='$cat'";
$results= mysql_query($query,'CATEGORY1');

一定有某种方法可以做到这一点,但是我根本找不到任何以这种方式将变量传递给MySQL查询的语法(我检查了php.net,该站点以及Google上的各种其他php资源)。 谁能帮我吗?

非常感谢,谢谢!

使用PDO准备好的语句

$categories = array(
    'CATEGORY1',
    'CATEGORY2',
    'CATEGORY3',
    'CATEGORY4',
    'CATEGORY5',
    'CATEGORY6'
);

$db = new PDO(...);
$stmt = $db->prepare('SELECT * FROM table_name WHERE category = :category');
$stmt->bindParam('category', $category);
foreach ($categories as $category) {
    $stmt->execute();
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        // do stuff with $row
    }
}

您不能在SQL中使用单个变量来表示逗号分隔的列表,就像我在这种情况下将它们用作IN子句的值一样。 您需要使用动态SQL,这意味着在将查询提交到数据库之前将其构造为字符串。

$array = array('category1', 'category2', 'category3');
$comma_separated = implode("','", $array);

$query = "SELECT * 
            FROM table_name 
           WHERE category IN ('$comma_separated')";

$results = mysql_query($query);

一种替代方法是使用MySQL的Prepared Statement语法 ,这是MySQL的动态SQL语法...

您可以为此使用sprintf

$query = "SELECT * FROM table_name WHERE category='%s'";
$results= mysql_query(sprintf($query,'CATEGORY1'));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM