Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php “建立多个”;或;在mySQL中基于用户输入_Php_Mysql_Sql - Fatal编程技术网

Php “建立多个”;或;在mySQL中基于用户输入

Php “建立多个”;或;在mySQL中基于用户输入,php,mysql,sql,Php,Mysql,Sql,我正试图找出最好的方法来建造这个。以下是我目前掌握的情况: 汇总在一个邮政编码中销售的所有小部件: select `Widgets`, SUM(`number sold`) as total_sold from mytable where `Widgets`="Super Widget" and `zip_code`="35801" 到目前为止,一切顺利。如果我想从两个邮政编码销售,我可以做类似的事情: select `Widgets`, SUM(`number sold`) as total

我正试图找出最好的方法来建造这个。以下是我目前掌握的情况:

汇总在一个邮政编码中销售的所有小部件:

select `Widgets`, SUM(`number sold`) as total_sold from mytable where
`Widgets`="Super Widget" and `zip_code`="35801"
到目前为止,一切顺利。如果我想从两个邮政编码销售,我可以做类似的事情:

select `Widgets`, SUM(`number sold`) as total_sold from mytable where 
`Widgets`="Super Widget" and (`zip_code`="35801" or 
`zip_code`="12345")
效果很好

我需要做的是能够设置它,这样用户就可以选择多个邮政编码,而不必事先知道他们想要多少。可能是2或20。有没有办法将此查询构造为数组或类似的结构?伪代码:

select `Widgets`, SUM(`number sold`) as total_sold from mytable where
`Widgets`="Super Widget" and
(`zip_code`=in_array[35801,12345,00124,43562,12441])
这将显示这5个邮政编码中的所有销售额。这将是一个简单的查询,通过将前端的用户输入作为逗号分隔的输入来构建

如有任何建议,将不胜感激。

请在中使用

select `Widgets`, SUM(`number sold`) as total_sold from mytable where `Widgets`="Super Widget" and `zip_code` in (35801,12345,00124,43562,12441)

select `Widgets`, SUM(`number sold`) as total_sold from mytable where `Widgets`="Super Widget" and `zip_code` in (35801,12345,00124,43562,12441)
您可以使用该函数(以下是链接中的示例):

根据您的情况,它可能看起来像:

...
and (`zip_code` IN ('35801', '12345', '00124', '43562', '12441'))
您可以使用该函数(以下是链接中的示例):

根据您的情况,它可能看起来像:

...
and (`zip_code` IN ('35801', '12345', '00124', '43562', '12441'))

如前所述,您可以使用SQL的IN函数,如果您是在PHP代码中构建此查询(您添加了一个PHP标记),那么您可以使用该函数创建“IN数组”

请注意,将值直接写入查询字符串是非常危险的,因为它会使您的应用程序遭受SQL注入攻击

更新:

您可以将IN与PDO一起使用,只需一点变通方法—您可以在查询中为每个值创建问号占位符。 我们将使用函数创建所需的问号占位符,并使用函数删除最后一个逗号。 假设您的值列表存储在$arr中,而您的PDO引用存储在$PDO中:

$arr = ['value 1', 'value 2', 'value 3' ...];
$placeHolders = rtrim(str_repeat('?,', cound($arr)), ',');
$query = "SELECT * FROM table WHERE id IN ($placeHolders)";
$stmt = $pdo->prepare($query);
$stmt->execute($arr);

变量$placeHolders将以数组中元素的数量为参数保存一个带“?”占位符的字符串,然后您可以将该数组传递给预eared语句的execute函数。

如前所述,您可以在SQL函数中使用,如果您正在用PHP代码构建此查询(您添加了一个PHP标记),然后,您可以使用函数创建“in-array”

请注意,将值直接写入查询字符串是非常危险的,因为它会使您的应用程序遭受SQL注入攻击

更新:

您可以将IN与PDO一起使用,只需一点变通方法—您可以在查询中为每个值创建问号占位符。 我们将使用函数创建所需的问号占位符,并使用函数删除最后一个逗号。 假设您的值列表存储在$arr中,而您的PDO引用存储在$PDO中:

$arr = ['value 1', 'value 2', 'value 3' ...];
$placeHolders = rtrim(str_repeat('?,', cound($arr)), ',');
$query = "SELECT * FROM table WHERE id IN ($placeHolders)";
$stmt = $pdo->prepare($query);
$stmt->execute($arr);

变量$placeHolders将以数组中的元素数为单位,为参数保留一个带“?”占位符的字符串,然后您可以将数组传递给预eared语句的execute函数。

将代码行缩进4个空格,这样它将被识别为代码。这非常有效。我想这是一个函数,但不知道它是什么。将代码行缩进4个空格,这样它就会被识别为代码。这非常有效。我想这是一个函数,但不知道它是什么。我可以在中使用带有
的PDO函数吗?这个更新对我帮助很大。谢谢我稍微调整了一下它。首先,第2行中有“cound”,它应该是“count”。另外,我发现我需要
$arr
类似于:
$arr=array('35801','36301')
将其放在方括号或花括号中会导致意外的“[”或“{”错误。很抱歉,输入错误。从PHP5.4开始,方括号可用,在此之前,必须使用“数组”这是一个非常好的答案。非常感谢显示了一个带有绑定占位符的准备语句的使用。+1.我可以在
中使用带有
的PDO函数吗?这个更新对我帮助很大。谢谢。我对它进行了一些调整。首先,第2行中有“cound”,应该是“count”。此外,我发现我需要
$arr
类似于:
$arr=array('35801','36301');
仅将其放在方括号或花括号中会导致意外的“[”或“{”错误。方括号从php 5.4开始可用,在此之前必须使用“array”这是一个非常好的答案。显示了一个带有绑定占位符的预处理语句的使用,真是太好了。+1。