PHP PDO导致“数组”值而不是实际值

时间:2013-07-19 14:55:59

标签: php mysql arrays pdo

我创建了一个查询MySQL数据库并显示结果的表单。现在我希望能够过滤我的结果。我有:

<input type="checkbox" name="multi_cif[]" value="<?php echo $g1 ?>"><font size="1" face="Arial, Helvetica, sans-serif">

在通过foreach显示所有结果的输出中,变量$ g1是MySQL查询值(地址)。我希望能够单击结果旁边的这些复选框,以便当用户单击标记为“过滤器”的按钮时,仅显示选中的结果。

到目前为止,我的代码如下:

<?PHP
if (isset($_POST['Submit2']))
{
$stmt = $dbh->prepare('SELECT * FROM CIF WHERE address LIKE ?');
$stmt->execute(array("%$_POST[multi_cif]%"));
//$stmt->execute(array(":term" => "%" . $_POST["multi_cif"] . "%"));
//$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
/*while ($results = $stmt->fetch())  //WILL UNCOMENT AND ADD OR LIKE AFTER SINGLE QUERY WORKING
{
    echo $results['address'];
    echo $results['alternativeid'];
}*/
print_r($_POST);
$results = $stmt->fetch();
echo $results['address'];
echo $results['alternativeid'];
}
?>

注释掉的东西是我尝试的其他东西。我非常接近我的结果。以下代码的结果以:

结尾
 [multi_cif] => Array ( [0] => test.13ann.com [1] => testfortestltd444557.com.tw ) ) coralarray.ruhttp://mirror3.malwaredomains.com/files/domains.txt

很明显,“Array”作为值传递,而不是分配给multi []的所需地址。有人可以解释一下这是为什么并帮助我解决它?我是昨天的PDO新手,但我选择使用它并重新处理我的其他语句来实现准备好的语句而不是动态构建它们。提前谢谢!

编辑:我接受了布拉德的一些建议,但保留了声明而没有额外的“或地址喜欢?”现在我只点击一个复选框,但仍然得到“数组”而不是“test.13.ann.com”一旦我找出为什么“数组”与价值我将添加额外的OR - 谢谢布拉德指出!

2 个答案:

答案 0 :(得分:1)

尝试访问第一个数组值,而不是外部数组 -

$stmt->execute(array("%{$_POST['multi_cif'][0]}%"));

动态地做,你可以尝试

// create n number of placeholders based off number of $_POST['multi_cif']
$place_holders = implode(' OR', array_fill(0, count($_POST['multi_cif']), ' address LIKE ?'));

// create n number of values based off number of $_POST['multi_cif']
$values = '"%'. implode('%","%', $_POST['multi_cif']).'%"';
// explode the values into an array
$values = explode(',',$values);

$stmt = $dbh->prepare("SELECT * FROM CIF WHERE $place_holders");
$stmt->execute(array($values));

答案 1 :(得分:0)

你快到了。您没有正确连接参数。

尝试

<?php
if (isset($_POST['Submit2']))
{
   $term = "%" . $_POST["multi_cif"] . "%";
   $stmt = $dbh->prepare('SELECT * FROM CIF WHERE address LIKE ?');
   $stmt->execute(array($term));
   $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
   while ($rows = $stmt->fetch())  
   {
       echo $results['address'];
       echo $results['alternativeid'];
   }
}
?>