Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.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
PHP-pdoselect语句来自_post变量_Php_Mysql_Pdo - Fatal编程技术网

PHP-pdoselect语句来自_post变量

PHP-pdoselect语句来自_post变量,php,mysql,pdo,Php,Mysql,Pdo,我试图从文本区域获取值,并在代码后面准备的select语句中使用它们。我将textarea中的值组合成一个字符串($output),该字符串在prepared语句中引用。如果我只有一个值,并且省略了值的串联,它将工作并返回结果。但是,当我将其更改回尝试并使用select语句中的多个值时,不会返回任何结果。我确信我是如何组合价值观的,这是一个问题,但我被困在这一点上。下面是具有1个值的工作示例,以及具有多个值的非工作示例 这适用于文本区域中的一个值 <?php $user = 'public

我试图从文本区域获取值,并在代码后面准备的select语句中使用它们。我将textarea中的值组合成一个字符串($output),该字符串在prepared语句中引用。如果我只有一个值,并且省略了值的串联,它将工作并返回结果。但是,当我将其更改回尝试并使用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>";
}
?>

尝试分别绑定每个值,而不是作为一个整体绑定。如果没有帮助,请发布$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>";
}
?>

我按照建议进行了更改,现在得到了结果,但这只是文本区域的最后一个值,而不是所有值。我在hostname字段中向数据库server1、server2和server3添加了三条测试记录。当我运行查询时,它只返回server3的值。下面是数组值行后面的$values变量转储…“`array(3){[0]=>string(8)“server1”[1]=>string(8)“server2”[2]=>string(7)“server3”}”`正如您所看到的,服务器1和服务器2的末尾都有一个空格,因此您必须对其进行修剪。我将相应地编辑我的答案。非常感谢您这么做。我一直在努力使此功能正常工作。很高兴我能帮上忙。您能接受我的答案吗?
<?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>";
}
?>