我正在编写一个PHP + PDO函数来检查用户名和电子邮件地址是否已存储在数据库中。 SQL代码返回错误(请参阅帖子底部)。
类似帖子建议我更改"保留关键字",我已经检查过,而且我没有使用任何我能看到的内容(SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax — PHP — PDO)。
我测试了phpMyAdmin上的SQL字符串,它可以工作。字符串如下所示:
SELECT COUNT(Email) FROM `contactdetails` WHERE 'Email' = 'example@example.com'
PHP代码:
<?php
function CheckAvailability($ValueToCheck, $FieldToCheck, $TableToCheck){
//Database connection.
$dbservername = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "db";
$db= new PDO("mysql:host=$dbservername; dbname=$dbname", $dbusername, $dbpassword);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//assigned 1 for value to be false
$count=1;
//SQL String
$result = $db->prepare("SELECT COUNT(:Field) FROM :Table WHERE :Field = :Value");
//Binding of parameters to SQL string
$result->bindParam(":Table", $TableToCheck, \PDO::PARAM_STR);
$result->bindParam(":Field", $FieldToCheck, \PDO::PARAM_STR);
$result->bindParam(":Value", $ValueToCheck, \PDO::PARAM_STR);
//String execution and data fetching
$result->execute();
$count = $result->fetchColumn();
//If the result of the string returns 0 return true if 1 or more return false.
if($count==0){return true;}else{return false;}
}?>
结果如下:
错误:SQLSTATE [42000]:语法错误或访问冲突:1064您 您的SQL语法有错误;检查对应的手册 您的MariaDB服务器版本,以便在附近使用正确的语法 &#39;&#39; ContactDetails&#39;在哪里&#39;电子邮件&#39; =&#39; example@gmail.com'&#39;在第1行。
我做错了什么?我可以修理吗?有没有更好的方法呢?