Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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
选择mysql的PHP数组_Php_Mysql - Fatal编程技术网

选择mysql的PHP数组

选择mysql的PHP数组,php,mysql,Php,Mysql,我有一个完整的包列表,我希望用户使用复选框选择并比较包。用户选择后,我将使用从复选框数组中获取的packages\u id将所有包数据显示为.PDF文件。如何分离阵列并注入mysql select 美元POST['compare']的输出: [14,15,16] Mysql查询: $packages=mysql_query(" select * from package where id in (" . implode(',', $_POST['compare']) . ") LIMIT

我有一个完整的包列表,我希望用户使用复选框选择并比较包。用户选择后,我将使用从复选框数组中获取的packages\u id将所有包数据显示为.PDF文件。如何分离阵列并注入mysql select

美元POST['compare']的输出: [14,15,16]

Mysql查询:

$packages=mysql_query(" 
select * 
from package 
where id in (" . implode(',', $_POST['compare']) . ") 
LIMIT 4");

如果我没弄错你的问题,你是想在这个问题上得到帮助

if( empty( $_POST['compare'] ) )
     // stop execution because they didn't pick anything    

$packages = mysql_query(   
     " SELECT * FROM package WHERE id = '". 
        implode( "' OR id = '", $_POST['compare'] )
        ."'" );
在对PDO进行更改之前,请看一看,这是编写查询的最好方法

您应该知道,您根本没有清理您的查询。即使您认为您正在控制复选框的值以及进入查询的内容,也很容易伪造表单数据。因此,您需要实现安全检查

一个简单的方法是:

foreach( $_POST['compare'] as $compare ){
    $sql[] = sanitize( $compare );   
}

显然,您需要一个消毒功能。这些都是很容易找到的。然后您可以在查询中使用$sql而不是$\u POST['compare']

mysql_query("
    select *
    from package
    where id in (" . implode(',', $_POST['compare']) . ")
");

适当注意消毒和验证您的输入

我无法让它工作。我认为不是把id放在('14,15,16')中,而是把id放在('14','15','16')中。我的代码在(14,15,16)中创建
id,这是有效的;不是('14 15 16')中的
id,
这将无法正常工作。是否可以将其分为3个mysql查询?例如,一个用于id 14,另一个用于15,最后一个用于16。因为.PDF在创建时只能捕获一个while循环。