我试图从文本区域获取值,并在稍后的代码中在准备好的选择语句中使用它们。我将文本区域中的值组合成一个在准备好的语句中引用的字符串($output)。如果我只有一个值,并省略值的串联,它将起作用并返回结果。但是,当我将其改回尝试使用 select 语句中的多个值时,不会返回任何结果。我确信我如何进行值的组合存在问题,但我陷入了这一点。以下是具有 1 个值的工作示例,以及具有多个值的非工作示例
这适用于文本区域中的一个值
<?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>";
}
?>
最佳答案
尝试单独绑定(bind)每个值,而不是整个绑定(bind)。如果这没有帮助,请发布 $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>";
}
?>
关于PHP - PDO 从 _post 变量中选择语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25189339/