由于带有动态PHP输入的SQL查询而导致PDO异常导致的致命错误

问题描述 投票:1回答:1

经过近一天的研究,我无法真正看到我的代码的错误是什么。我正在尝试创建一个返回查询结果行数的小型原型函数。

我得到的错误是:Uncaught PDOException: SQLSTATE[42000]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]The multi-part identifier "[email protected]" could not be bound. in C:\inetpub\wwwroot\index.php:59

第59行是$stmt->execute();

我相信这个问题来自我的SQL查询,但我不是100%肯定。

代码的工作方式是从POST输入中获取值,并在行和列中检查它是否包含模式中的所述值。

另外,我使用MSSQL(不是MySQLi)和PHP来完成任务。


这是我希望php代码发送SQL查询并检查结果是否存在的主要位。

<?php  
    include "connect.php";

    if(isset($_POST['login']))
    {
        $email = $_POST['EMAIL'];
        $password = $_POST['PASSWORD']; 

        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $stmt = $conn->prepare("SELECT * FROM users WHERE EMAIL=$email;"); 
        $stmt->execute();

        $count= $stmt->rowCount();
        echo "Row count: $count \n";
    }
?> 

刚提到我已经尝试过对SQL查询的各种更改,例如:

$stmt = $conn->prepare("SELECT * FROM users WHERE EMAIL='".$email."';");

$stmt = $conn->prepare("SELECT * FROM users WHERE EMAIL=?;");

有一个数组输入,其中有$email

全部返回相同的相同错误。


在这里,我有connect.php,以防问题可能来自这里。

<?php 
        $servername = "localhost";
        $username = "sa";
        $password = ""; 

        try 
        {
            $conn = new PDO("sqlsrv:Server=$servername; Database=db", $username, $password);
            // set the PDO error mode to exception
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            echo "Connected!";
            return $conn;
        }

        catch(PDOException $e)
        {
            echo "Connection failed: " . $e->getMessage();
        }
?>
php sql sql-server database
1个回答
0
投票

基本上我解决问题的方法是将EMAILPASSWORD转换为VARCHAR

$stmt = $conn->prepare("SELECT ID, EMAIL, LAST_NAME FROM users WHERE CONVERT(VARCHAR, EMAIL)='[email protected]' AND CONVERT(VARCHAR, PASSWORD)='1234'");  
© www.soinside.com 2019 - 2024. All rights reserved.