【问题标题】:PHP Unexpected end of file how to fix? [duplicate]PHP 文件意外结束如何解决? [复制]
【发布时间】:2017-08-02 22:34:31
【问题描述】:

这是我的代码:

<?php
$db = new mysqli('localhost', 'USER', 'PASS', 'DB') or die(mysql_error());

$output = '';

//collect
if(isset($_POST['search'])) {
  $searchq = $_POST['search'];
  $searchq = preg_replace("#[^0-9a-z]#i","",$searchq);

  $query = <<<SQL
    SELECT *
    FROM `users`
    WHERE `title`
    LIKE '%$searchq%'
    OR `last`
    LIKE '%$searchq%'
  SQL;

  $count = $db->query($query);
  if($count == 0) {
    $output = 'There was no search results!';
  }else{
    while($row = mysqli_fetch_array($count)) {
      $fname = $row('title');
      $lname = $row('last');
      $id = $row('id');

      $output .= '<div>'.$fname.' '.$lname.'</div>';
    }
  }

}

?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="dcterms.created" content="Sat, 11 Mar 2017 00:48:58 GMT">
    <meta name="description" content="">
    <meta name="keywords" content="">
    <title>Search</title>

  </head>
  <body>



  <form action="index.php" method="post">
    <input type="text" name="search" placeholder="Search for Documents..." />
    <input type="submit" value=">>"></input>
  </form>

<?php 
print("$output"); 
?>
</body>
</html>

我不知道出了什么问题。我的文件保存为 .php 文件。我尝试了多种方法,但无法修复或发现错误。此脚本被用作基本搜索脚本,我无法对其进行测试,因为我不断收到文件意外结束的错误。

【问题讨论】:

  • SQL; 应该没有空格,所以修剪它使其位于行首。
  • 也使用prepared statements
  • $row('title'); 不正确,它的$row['title'];
  • 另外mysql_* 也不能与mysqli 一起使用。
  • 事实上mysql_error()在php7中根本不应该工作

标签: php html mysqli php-7.1


【解决方案1】:

认为 $query 应该在 '"' 内,我怎么认为你工作得很好,所以我做了 .php 并且问题在 $query = &lt;&lt;&lt; SQL 附近,这应该是 '

更新 1 我已阅读文档,Heredoc 要求密钥不应缩进,因此请使用 SQL; unindentend 而不是 (indent)SQL;

【讨论】:

    【解决方案2】:

    您的代码存在一些问题。

    1. 如果您要使用Heredoc,则结束标识符必须是单独的(包括空格)。所以你需要把它一直带到边缘,例如

    不正确:

     SQL;
    

    正确:

    SQL;
    

    http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

    我也建议为此使用普通字符串。

    1. 访问数组中的值时,您需要使用方括号而不是括号,例如:

      $fname = $row['title'];
      

    最后,我建议您为查询绑定参数。 http://php.net/manual/en/pdostatement.bindparam.php

    希望这会有所帮助!

    【讨论】:

    • 感谢您的回答,但在 PHP 7 中您可以使用方括号而不是方括号。方括号在 PHP 7 中不再起作用。
    • 我猜@RossWilson,那我们都错了。大声笑。
    • @Ahm23 什么?!?你在哪里听说的?我有多个使用 php7 的项目,[] 工作正常。此外,如果您使用(),它会尝试将其视为函数,在这种情况下会导致抛出Function name must be a string 错误。
    • 对不起我的错。你是对的。
    【解决方案3】:

    替换这个:

    $query = <<<SQL
      SELECT *
      FROM `users`
      WHERE `title`
      LIKE '%$searchq%'
      OR `last`
      LIKE '%$searchq%'
    SQL;
    

    有了这个:

    $query = "SELECT *
              FROM `users`
              WHERE `title` LIKE '%{$searchq}%' OR `last` LIKE '%{$searchq}%'";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      • 2012-06-10
      • 1970-01-01
      相关资源
      最近更新 更多