无法弄清楚为什么会出现此错误:SQLSTATE [42000]:语法错误或访问冲突:1064

时间:2016-10-06 14:25:29

标签: php mysql sql pdo bindparam

我正在编写一个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行。

我做错了什么?我可以修理吗?有没有更好的方法呢?

0 个答案:

没有答案