ExtJS/PHP/MySQL: Uncaught SyntaxError: Unexpected token ILLEGAL

ExtJS/PHP/MySQL: Uncaught SyntaxError: Unexpected token ILLEGAL

我想弄清楚为什么下面的 $sql 回显语句会在 JavaScript 中抛出这个错误。它来自 $sql 赋值语句吗?为什么会这样?我只是 运行 阅读了 PHP 中编写的一些书籍示例。

Uncaught SyntaxError: Unexpected token ILLEGAL

<?php
session_start();
if (isset($_POST["exec"]) && $_POST["exec"] == "1") {
    $url = "127.0.0.1";
    $user = "root";
    $pass = "root";
    $db = "book1";

$message = "1";
echo "<script type='text/javascript'>alert('$message');</script>";

    $link = mysql_connect($url, $user, $pass) or die("cannot connect.");
    $sdb = mysql_select_db($db, $link) or die("faild select db");

$message = "2";
echo "<script type='text/javascript'>alert('$message');</script>";

    $sql = implode("\n", array(
        "SELECT",
        "    COUNT(id) as auth,",
        "    book1.users.email,",
        "    book1.users.firstname,",
        "    book1.users.lastname",
        "FROM",
        "    book1.users",
        "WHERE",
        "    book1.users.email = 'k'",
        "AND",
        "    book1.users.passwd = SHA1(MD5('k'))",
        "AND",
        "    book1.users.status = 1;"
    ));


echo "<script type='text/javascript'>alert('$sql');</script>";


    $result = mysql_query($sql, $link) or die("faild query<hr/>SQL:" . $sql);
    $row = mysql_fetch_assoc($result);
    $auth = $row["auth"];
    mysql_free_result($result);
    mysql_close($link) or die("faild disconnect");
    if ($auth == "1") {
        $_SESSION["USERINFO"] = array(
            "email" => $row["email"],
            "firstname" => $row["firstname"],
            "lastname" => $row["lastname"]
        );
        header("Location: ./index.php");
    }
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<form action="login.php" method="post">
E-Mail:<input type="text" name="email" value=""/><br/>
Password:<input type=password" name="passwd" value="" /><br/>
<input type="submit" value="Login"/>
<input type="hidden" name="exec" value="1"/>
</form>
</body>
</html>

编辑:

这是代码过去的样子,但在浏览器控制台中抛出了同样的错误 window。

$sql = implode("\n", array(
    "SELECT",
    "    COUNT(id) as auth,",
    "    users.email,",
    "    users.firstname,",
    "    users.lastname",
    "FROM",
    "    users",
    "WHERE",
    "    users.email = '" . mysql_real_escape_string($_POST['email']) . "'",
    "AND",
    "    users.passwd = SHA1(MD5('" . mysql_real_escape_string($_POST['passwd']) . "'))",
    "AND",
    "    users.status = 1;"
));

看来作者忘记了输入字段中类型属性值 ("password") 前的引号。我可能是唯一一个用 packtpub.com 上出版的书 "Ext JS Data-driven Application Design" 的真实代码尝试过这个例子的人。这让我觉得很特别。

我创建了一个名为 "book1" 的模式(PHP $db 变量 - MySQL 模式类似于数据库),并将数据库凭据更改为 root/root与我在 Windows 上安装的 MySQL 的设置相匹配的代码。然后我必须将状态为 1 的用户添加到 "users" table 才能正常工作。

也许在 MySQL 上为我使用的版本 (6.3) 编写脚本是不同的,但是在创建 table 时语法也一直失败。我不得不忽略除 CREATE 语句之外的所有行。我还排除了以 "ENGINE" 开头的代码。

第 1 章的原始代码:

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `status` tinyint(1) NOT NULL DEFAULT '1',
  `email` varchar(255) NOT NULL,
  `passwd` char(40) NOT NULL,
  `lastname` varchar(20) NOT NULL,
  `firstname` varchar(20) NOT NULL,
  `modified` datetime DEFAULT NULL,
  `created` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

SET FOREIGN_KEY_CHECKS = 1;

新密码:

CREATE TABLE `users` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `status` tinyint(1) NOT NULL DEFAULT '1',
  `email` varchar(255) NOT NULL,
  `passwd` char(40) NOT NULL,
  `lastname` varchar(20) NOT NULL,
  `firstname` varchar(20) NOT NULL,
  `modified` datetime DEFAULT NULL,
  `created` datetime NOT NULL,
  PRIMARY KEY (`id`)
);