PHP - PDO 从 _post 变量中选择语句

标签 php mysql pdo

我试图从文本区域获取值,并在稍后的代码中在准备好的选择语句中使用它们。我将文本区域中的值组合成一个在准备好的语句中引用的字符串($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/

相关文章:

php - 如何使用 Yii2 填充连接表?

php - 如果条件为真但不是在每一行都为真,如何插入或更新?

php - 计算搜索查询返回的行数

php - Android 应用程序与用代码点火器框架编写的 php 文件通信

php - 在带有 PDO 的同一 mysql 语句中使用 'AND' 和 'OR'

php - PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: 无效

php - 获取字符串摘录中的所有段落

php - 带有 PHP/MySQL 可视化设计器的 ORM 工具

php - 从mysql数据库中删除特定用户记录

c# - 事务内的 FOR UPDATE 不锁定行