经过将近一天的研究,我无法真正看到我的代码的错误是什么。我正在尝试创建一个返回查询结果行数的小原型函数。
我得到的错误是: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:inetpubwwwrootindex.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();
}
?>
基本上我解决问题的方法是将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'");