Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由于使用动态PHP输入的SQL查询导致PDO异常,因此出现致命错误_Php_Sql_Sql Server_Database - Fatal编程技术网

由于使用动态PHP输入的SQL查询导致PDO异常,因此出现致命错误

由于使用动态PHP输入的SQL查询导致PDO异常,因此出现致命错误,php,sql,sql-server,database,Php,Sql,Sql Server,Database,经过将近一天的研究,我真的看不出我的代码有什么错误。我试图创建一个小的原型函数,返回查询结果的行数 我得到的错误是:uncaughtpdoception:SQLSTATE[42000]:[Microsoft][odbcdriver17 for SQL Server][SQL Server]多部分标识符“my@email.com“无法约束。在C:\inetpub\wwwroot\index.php中:59 第59行是$stmt->execute() 我相信问题来自我的SQL查询,但我不是100%确

经过将近一天的研究,我真的看不出我的代码有什么错误。我试图创建一个小的原型函数,返回查询结果的行数

我得到的错误是:
uncaughtpdoception:SQLSTATE[42000]:[Microsoft][odbcdriver17 for SQL Server][SQL Server]多部分标识符“my@email.com“无法约束。在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";
    }
?> 

使用包含
$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();
        }
?>

基本上,我解决问题的方法是将
电子邮件和
密码转换为
VARCHAR

$stmt = $conn->prepare("SELECT ID, EMAIL, LAST_NAME FROM users WHERE CONVERT(VARCHAR, EMAIL)='my@email.com' AND CONVERT(VARCHAR, PASSWORD)='1234'");  

基本上,我解决问题的方法是将
电子邮件
密码
转换为
VARCHAR

$stmt = $conn->prepare("SELECT ID, EMAIL, LAST_NAME FROM users WHERE CONVERT(VARCHAR, EMAIL)='my@email.com' AND CONVERT(VARCHAR, PASSWORD)='1234'");  

@B001ᛦ 哦,天哪,我道歉。
附近的语法不正确
到底是什么?对不起@u_mulder,我不小心粘贴了错误的错误日志。现在它在上面的几行中得到了修复。当时我正在试验,以确定问题是否与输入类型有关,但我不认为是这样。
$email
是一个字符串值,应该被引用。或者使用预先准备好的语句。@B001ᛦ 哦,天哪,我道歉。
附近的语法不正确
到底是什么?对不起@u_mulder,我不小心粘贴了错误的错误日志。现在它在上面的几行中得到了修复。当时我正在试验,以确定问题是否与输入类型有关,但我不认为是这样。
$email
是一个字符串值,应该被引用。或者使用事先准备好的陈述。
$stmt = $conn->prepare("SELECT ID, EMAIL, LAST_NAME FROM users WHERE CONVERT(VARCHAR, EMAIL)='my@email.com' AND CONVERT(VARCHAR, PASSWORD)='1234'");