PHP - 来自_post变量的PDO select语句

时间:2014-08-07 18:14:55

标签: php mysql pdo

我正在尝试从textarea中获取值,并在我的代码中稍后在准备好的select语句中使用它们。我正在将textarea中的值组合成一个在预准备语句中引用的单个字符串($ output)。如果我只有一个值,并省略了值的连接,它将起作用并返回结果。但是,当我将其更改回来尝试使用多个值IN select语句时,不会返回任何结果。我确定我在如何组合价值方面存在问题,但我现在陷入困境。下面是具有1个值的工作示例,以及具有多个值的非工作示例

这适用于textarea中的一个值

<?php
$user = 'public';
$pass = '';
$db = new PDO ('mysql:host=localhost;dbname=Inventory', $user, $pass );

$text = trim($_POST['ServerName']);
$query = $db->prepare("Select * from allhostids where hostname = :parameter");
$query->bindParam(':parameter', $text, PDO::PARAM_STR);
$query->execute();
$result = $query->fetchAll();

foreach ($result as $row){
echo "<li>{$row['hostname']}</li>";
echo "<li>{$row['hostid']}</li>";
echo "<li>{$row['console']}</li>";
}
?>

这个我需要的例子,不会返回任何结果。

<?php
$user = 'public';
$pass = '';
$db = new PDO ('mysql:host=localhost;dbname=Inventory', $user, $pass );

$text = trim($_POST['ServerName']);
$textAr = explode("\n", $text);
$values = array_values($textAr);
$string = implode("','", $values);
$string = "'".$string."'";
$output = "(".$string.")";
//$output becomes the combined values from textarea like so('server1 ','server2 ','server3')

$query = $db->prepare("Select * from allhostids where hostname in :parameter");
$query->bindParam(':parameter', $output, PDO::PARAM_STR);
$query->execute();
$result = $query->fetchAll();

foreach ($result as $row){
echo "<li>{$row['hostname']}</li>";
echo "<li>{$row['hostid']}</li>";
echo "<li>{$row['console']}</li>";
}
?>

1 个答案:

答案 0 :(得分:1)

尝试单独绑定每个值而不是整体绑定。如果这没有帮助,请发布$ values内容。

<?php
$user = 'public';
$pass = '';
$db = new PDO ('mysql:host=localhost;dbname=Inventory', $user, $pass );

$text = trim($_POST['ServerName']);
$textAr = explode("\n", $text);
$values = array_values($textAr);
$in = implode(', ', array_fill(0, count($values ), '?'));
$query = "SELECT * FROM allhostids WHERE hostname IN ($in)";
$query = $db->prepare($query);
foreach ($values as $i => $value) {
    $query->bindValue($i + 1, trim($value), PDO::PARAM_STR); //trim here
}
$query->execute();
$result = $query->fetchAll();

foreach ($result as $row){
echo "<li>{$row['hostname']}</li>";
echo "<li>{$row['hostid']}</li>";
echo "<li>{$row['console']}</li>";
}
?>