0

我正在运行准备好的语句,但出现以下错误。我无法理解问题是什么。由于相同的查询在 PHPMyAdmin 中运行良好。

代码

$queryConstruct = "
    SELECT id FROM registrations WHERE 
        email = '$email' 
    AND 
        license_type = $license_type";

错误

致命错误:准备查询时出现问题(SELECT id FROM registrations WHERE email = 'test1@gmail.com' AND license_type = 0)您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 444 行 mysqli.lib.php 第 2 行的 **''test1@gmail.com' AND license_type = 0' ** 附近使用

4

2 回答 2

2

准备好的语句看起来像这样

SELECT `id` 
FROM `registgrations` 
WHERE `email` = :email
AND `license_type` = :license_type

查看 PDO 手册文档以了解如何使用它。

http://php.net/manual/en/class.pdostatement.php

于 2013-09-12T22:37:59.623 回答
2

正如罗廷汉所说,这不是一个准备好的声明。来自PHP 文档

if ($stmt = $mysqli->prepare("SELECT id FROM Registrations WHERE email=? AND license_type=?")) {
    $stmt->bind_param("s", $email);
    $stmt->bind_param("s", $license_type);
    $stmt->execute();
    $stmt->bind_result($id);
    $stmt->fetch();
    printf("%s - %s - %s\n", $id, $email, $license_tpe)
    $stmt->close();
}

不过,不确定我是否正确编辑。无论如何,这应该暗示您所做的不是准备好的陈述。

请注意,不是连接查询中的实际值,而是将它们替换为占位符(在本例中为“?​​”),然后由值绑定。这样,可以防止SQL 注入操纵您的查询,从而破坏您的数据。

更重要的是,考虑研究PDO类以获得更简单的方法。

于 2013-09-12T22:45:42.023 回答