PHP 文件意外结束如何解决?
PHP Unexpected end of file how to fix?
这是我的代码:
<?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 文件。我尝试了多种方法,但无法修复或发现错误。此脚本用作基本搜索脚本,我无法对其进行测试,因为我不断收到意外文件结束错误。
认为 $query 应该在 ' " ' 内,但我认为你像现在这样工作得很好,所以我做了 .php 并且问题接近 $query = <<< SQL
,这应该是'<<'或'<',试试吧。
祝你好运
更新 1
我已经阅读了文档并且 Heredoc 要求密钥不应缩进,因此请使用
SQL;
unindentend 而不是 (indent)SQL;
替换为:
$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}%'";
您的代码有几个问题。
- 如果您要使用
Heredoc
,结束标识符必须单独存在(包括空格)。所以你需要把它一直带到边缘,例如
不正确:
SQL;
正确:
SQL;
http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
我还建议为此使用普通字符串。
访问数组中的值时需要使用方括号而不是圆括号,例如:
$fname = $row['title'];
最后,我建议您考虑为您的查询绑定参数。 http://php.net/manual/en/pdostatement.bindparam.php
希望对您有所帮助!
这是我的代码:
<?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 文件。我尝试了多种方法,但无法修复或发现错误。此脚本用作基本搜索脚本,我无法对其进行测试,因为我不断收到意外文件结束错误。
认为 $query 应该在 ' " ' 内,但我认为你像现在这样工作得很好,所以我做了 .php 并且问题接近 $query = <<< SQL
,这应该是'<<'或'<',试试吧。
祝你好运
更新 1
我已经阅读了文档并且 Heredoc 要求密钥不应缩进,因此请使用
SQL;
unindentend 而不是 (indent)SQL;
替换为:
$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}%'";
您的代码有几个问题。
- 如果您要使用
Heredoc
,结束标识符必须单独存在(包括空格)。所以你需要把它一直带到边缘,例如
不正确:
SQL;
正确:
SQL;
http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
我还建议为此使用普通字符串。
访问数组中的值时需要使用方括号而不是圆括号,例如:
$fname = $row['title'];
最后,我建议您考虑为您的查询绑定参数。 http://php.net/manual/en/pdostatement.bindparam.php
希望对您有所帮助!