我在使用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}
在此先感谢!!
答案 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;
}
}
当然我现在似乎无法将它变成常规代码块,但如果你复制并粘贴它,它应该可以正常工作:)
祝你好运!