Неустранимая ошибка из-за исключения PDO из-за запроса SQL с динамическим вводом PHP - PullRequest
1 голос
/ 02 апреля 2019

После почти дня исследований я не могу понять, в чем ошибка с моим кодом. Я пытаюсь создать небольшую функцию-прототип, которая возвращает количество строк результатов запроса.

Я получаю ошибку: Uncaught PDOException: SQLSTATE[42000]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]The multi-part identifier "my@email.com" 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();
        }
?>

1 Ответ

0 голосов
/ 03 апреля 2019

По сути, я решил проблему, преобразовав EMAIL и PASSWORD в VARCHAR:

$stmt = $conn->prepare("SELECT ID, EMAIL, LAST_NAME FROM users WHERE CONVERT(VARCHAR, EMAIL)='my@email.com' AND CONVERT(VARCHAR, PASSWORD)='1234'");  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...