Select语句中的PHP PDO错误

时间:2013-06-14 19:45:27

标签: php mysql pdo

我在使用PDO时遇到了一些问题。第一个问题是在我的连接字符串中,我不能使用在另一个文件中定义的变量(尝试包括& require)。它给了我一个错误并显示了具有变量名而不是值的连接字符串(是的,尝试了单引号和双引号)。

第二个问题,更紧迫的是我在尝试验证登录时遇到错误。我有它使用旧的mysqli,所以我知道HTML是有效的,只是不是新的逻辑。附件是我正在使用的功能:

function validateuser($un, $em)
{
    try
    {
        $db = new PDO("mysql:host=localhost;dbname=XX", 'aa', 'bb', array(
            PDO::ATTR_EMULATE_PREPARES => false,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        ));
        $stmt = $db->query("SELECT AcctType FROM usr WHERE LOGIN_ID=? or CONTACT_EMAIL=?;");
        $stmt->execute(array(
            $un,
            $em
        ));
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    catch(exception $e)
    {
        echo $e;
    }
}

我得到的确切错误是:

Exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 2031 ' in db_backend.php:110 Stack trace: #0 db_backend.php(110): PDO->query('SELECT AcctType...') #1 newuser.php(42): validateuser('Nefer', 'neferitous@blah...') #2 {main}



在此先感谢!!

3 个答案:

答案 0 :(得分:3)

要绑定参数,您需要使用prepared statement而不是查询。

尝试以下方法:

$stmt = $db->prepare("SELECT AcctType FROM usr WHERE LOGIN_ID=? or CONTACT_EMAIL=?;");
$stmt->execute(array(
    $un,
    $em
));

答案 1 :(得分:0)

对于你的第一个问题,我很确定你可以打破字符串并连接变量:

PDO("mysql:host=".$host.";dbname=".$dbname, $user, $pass,

答案 2 :(得分:-4)

这是我的最终代码,使PDO声明的这部分工作:

    function validateuser($ un,$ em){     尝试{     $ db = new PDO(“mysql:host = localhost; dbname = db”,'id','pass',     array(PDO :: ATTR_EMULATE_PREPARES => false,PDO :: ATTR_ERRMODE =>     PDO :: ERRMODE_EXCEPTION));
    $ stmt = $ db-> prepare(“SELECT ACCTTYPE FROM users WHERE LOGIN_ID =?或CONTACT_EMAIL =?;”);     $ stmt-> bindParam(1,$ un,PDO :: PARAM_STR,15);     $ stmt-> bindParam(2,$ em,PDO :: PARAM_STR,150);     $ stmt->执行();     $ result = $ stmt-> fetch();     return $ result [“ACCTTYPE”];     }     捕获(例外$ e)     {     echo $ e;     }     } 当然我现在似乎无法将它变成常规代码块,但如果你复制并粘贴它,它应该可以正常工作:)

祝你好运!