【问题标题】:PHP Search database with PDO带有 PDO 的 PHP 搜索数据库
【发布时间】:2017-09-26 00:11:27
【问题描述】:

我认为这将是一项相当简单的任务,但当我现在尝试搜索“注意:xxxxxxxx.php 中的数组到字符串转换”时,我不断收到此错误。

我的代码很简单,如下:

<?php
$content .= "<h1>Search for a comic</h1>";

$form_html = "<form action='' method='POST' >
    <fieldset><label>Name: <input type='text' name='search_title'  placeholder='Title'></label>
    </fieldset><fieldset>
    <input type='submit' value='Search' name='submit'>
    </fieldset>
</form>";

$content .= $form_html;

if(isset($_POST['submit'])){
    $input_search = $_POST['search_title'];

    $results = $link->prepare('SELECT * FROM Comic WHERE name LIKE ?');
    $results->execute(array('%'.$input_search.'%'));
    $all_results = $results->fetchAll();
    $content .= $all_results;

}
?>

我已经阅读了大量其他类似的问题,并尝试了几种不同的方法,但到目前为止都没有奏效。

更多信息。 $content 由我的索引回显,因此全部显示。 我的数据库有一个名为“漫画”的表,有 9 列,其中第二列是“名称”。我希望用户能够输入一个单词或完整的标题,并向他们显示带有该单词或标题的所有漫画的列表(例如:我搜索“世界末日”或“原子骷髅”和漫画“世界末日来了!”和“原子骷髅的诅咒”显示)。

【问题讨论】:

  • $all_results 是一个数组,所以试试print_r($content); 您可能需要重新考虑一下您的逻辑,以便从数组中获取您想要的内容并将 that 附加到内容中.

标签: php mysql database search pdo


【解决方案1】:

$results-&gt;fetchAll(); 返回结果集中剩余行的数组。不是字符串。所以$content .= $all_results; 是试图将一个数组附加到一个字符串中。

您需要遍历它提供的数组中的每个项目,然后您可以对它们做任何您想做的事情。

http://php.net/manual/en/pdostatement.fetchall.php可以帮到你。

【讨论】:

  • 我试过了,但没有成功:foreach($all_results as $row){ $content .= $row; }
  • $row 也是一个数组。执行我建议的 print_r,这样您就可以可视化您的数组 @c.timothy
  • $row 是行中每个单独字段/列的数组。
  • 感谢您的帮助,我修复了一半!出于某种原因,我得到了每个结果的两倍。我不得不使用两个 foreach 语句,因为每一行都是一个数组
【解决方案2】:

所以使用这个:

if(isset($_POST['submit'])){
    $input_search = $_POST['search_title'];

    $results = $link->prepare('SELECT name FROM Comic WHERE name LIKE ?');
    $results->execute(array('%'.$input_search.'%'));
    $all_results = $results->fetchAll();
    $row_cnt = $results->rowCount();

    if($row_cnt == 0){
        $content .= "There are no results.";
    }else {
        foreach ($all_results as $row1){
            foreach ($row1 as $data){
                $content .= $data ."<br />";
            }
        }
    }
}

我输出了结果,但每个结果都有两个(上面建议的 print_r 向我展示了这样的内容:

Array ( [0] => Array ( [name] => Man of Steel [0] => Man of Steel ) [1] => Array ( [name] => 与超人交谈的孩子 [0] => 和超人说话的孩子))

【讨论】: