准备好的语句中的Pdo参数错误

时间:2013-11-28 20:13:42

标签: php mysql pdo

对不起我的英语我是法语:D,

好的,我使用pdo来连接MySQL,但我在PDO准备语句中有一个错误。

我尝试将我的表名包含在准备请求中,但我有一个错误:

错误:SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便在NbC​​lient' NbClient附近使用正确的语法。限制2)作为sr'在第1行 错误代码:42000

我的代码:

<html>
    <head>
    </head>

    <body>
    <?php

    const HOST='localhost';
    const DBNAME='GameWave';
    const USER='';
    const PASSWORD='';
    const TABLE='NbClient';

    echo GetNbClientByHour(2);


    function GetNbClientByHour($nb_heure)
    {       
        $hookConstTable = TABLE;


        try
        {
            $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
            $connexion = new PDO('mysql:host='.HOST.';dbname='.DBNAME, USER, PASSWORD, $pdo_options);

            $prepare=$connexion->prepare('select SUM(record) from (select v_tot as record from :tab LIMIT :nb_heure) as sr;');
            $prepare->bindParam(':tab', $hookConstTable, PDO::PARAM_STR);
            $prepare->bindParam(':nb_heure', $nb_heure, PDO::PARAM_INT);
            $prepare->execute();

            $resultat = $prepare->fetch();
            $prepare->closeCursor();

            return $resultat[0];
        }            
        catch(Exception $e)
        {
            echo 'Error : '.$e->getMessage().'<br />';
            echo 'Error Code : '.$e->getCode();
        }
    }
    ?>
    </body>
</html>

但是如果我尝试在请求中写表名,那就是它的工作......

$prepare=$connexion->prepare('select SUM(record) from (select v_tot as record from NbClient LIMIT :nb_heure) as sr;');
$prepare->bindParam(':nb_heure', $nb_heure, PDO::PARAM_INT);

你能帮我吗?

1 个答案:

答案 0 :(得分:2)

问题出在这里:

select v_tot as record from :tab LIMIT :nb_heure

因为根据手册,您不能在预准备语句中使用表名作为变量。