如何在PHP中缩写MySQL查询?

如何在PHP中缩写MySQL查询?,php,mysql,Php,Mysql,我有一个页面需要进行六个几乎相同的查询,它们之间的唯一区别是“category”的值: 我不想为每个不同的类别写出六个不同的$query变量($query1、$query2等),我想缩写一下,这样我可以在每次实例化$query时将category作为变量传入,如下所示: $query = "SELECT * FROM table_name WHERE category='$cat'"; $results= mysql_query($query,'CATEGORY1'); 一定有办法做到这一点,

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

我不想为每个不同的类别写出六个不同的$query变量($query1、$query2等),我想缩写一下,这样我可以在每次实例化$query时将category作为变量传入,如下所示:

$query = "SELECT * FROM table_name WHERE category='$cat'";
$results= mysql_query($query,'CATEGORY1');
一定有办法做到这一点,但我在任何地方都找不到以这种方式将变量传递给MySQL查询的语法(我查看了php.net、这个网站以及Google上的其他各种php资源)。有人能帮我吗


非常感谢,谢谢

您可以使用
sprintf
进行以下操作:

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

您可以使用
sprintf

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

使用及


您不能在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的动态SQL语法…

您不能在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的动态SQL语法…

这是准备语句的原始用例。如果使用
占位符并将参数作为列表传递给
->execute()
“primeval”,这非常简单?这不可能是对的。这是准备好的语句的原始用例。如果使用
占位符并将参数作为列表传递给
->execute()
“primeval”,这非常简单?这不可能是对的。虽然这很好,但是它被参数化了,不是每个类别都会执行一条语句吗?@omgponis是的,但该语句只准备/编译了一次。在OP中,每一条语句都将被单独编译。千万不要在六个查询中做你能在一个查询中做的事情。@OMGPonies我同意,
SELECT
查询并不是这种情况下最好的例子。事实上,循环中的参数绑定通常最好应用于
INSERT
/
UPDATE
查询。虽然这是参数化的,但它不是仍然在每个类别执行一条语句吗?@OMGPonies是的,但该语句只准备/编译一次。在OP中,每一条语句都将被单独编译。千万不要在六个查询中做你能在一个查询中做的事情。@OMGPonies我同意,
SELECT
查询并不是这种情况下最好的例子。事实上,循环中的参数绑定通常最好应用于
INSERT
/
UPDATE
查询!谢谢大家。这就是我要找的!谢谢大家。别忘了开头和结尾的引号;-)@菲尔·布朗:谢谢,修正了。别忘了开头和结尾的引号;-)@菲尔·布朗:谢谢,修好了。