[英]trying to convert mysql select statement to PDO
我正在嘗試從舊的MySQL庫轉換為PDO。
為了使用舊的MySQL代碼讀取數據,我使用:
$ assoc = mysql_fetch_assoc($ exeqr);
使用PDO,我正在嘗試使用foreach
來實現該功能,就像使用PDO在我的代碼中所做的那樣,但是它不起作用...
你能在這里看到什么問題嗎?
我的老歌使用MySQL:
<?php
if(isset($_POST['sendLogin']))
{
$f['email'] = mysql_real_escape_string($_POST['email']);
$f['pass'] = mysql_real_escape_string($_POST['password']);
if(!$f['email'] || !valMail($f['email']))
{
echo 'Email empty or invalid';
}
else if(strlen($f['pass']) <8 || strlen($f['pass'])>12)
{
echo 'pass must have between 8 and 12 chars!';
}
else
{
$autEmail = $f['email'];
$autpass = $f['pass'];
$query = "SELECT * FROM users where email= '$autEmail'";
$exeqr = mysql_query($query) or die(mysql_error());
$assoc = mysql_fetch_assoc($exeqr);
if(mysql_num_rows($exeqr) == 1 )
{
if($autEmail == $assoc['email'] && $autpass == $assoc['pass'])
{
$_SESSION['assoc'] = $assoc;
header('Location:'.$_SERVER['PHP_SELF']);
}
else
{
echo ' wrong password';
}
}
else
{
echo 'email does no exist';
}
}
}
而我正在嘗試使用PDO轉換的新代碼:
<?php
if(isset($_POST['sendLogin']))
{
$f['email'] = mysql_real_escape_string($_POST['email']);
$f['pass'] = mysql_real_escape_string($_POST['password']);
if(!$f['email'] || !valMail($f['email']))
{
echo 'Email empty or invalid';
}
else if(strlen($f['pass']) <8 || strlen($f['pass'])>12)
{
echo 'pass must have between 8 and 12 chars!';
}
else
{
$autEmail = $f['email'];
$autpass = $f['pass'];
$searchEmail = $pdo->prepare("SELECT * FROM users where email=:email");
$searchEmail->bindValue(":email,$autEmail");
$searchEmail->execute;
$num_rows = $searchEmail->fetchColumn();
$result = $searchEmail->fetch(PDO::FETCH_OBJ);
if($num_rows == 1)
{
if($autEmail == $result['email'] && $autpass == $result['pass'])
{
$_SESSION['result'] = $result;
header('Location:'.$_SERVER['PHP_SELF']);
}
else
{
echo ' wrong password';
}
}
else
{
echo 'email does no exist';
}
}
}
警告:PDOStatement :: bindValue()需要至少2個參數,其中1個在$ searchEmail-> bindValue(“:email,$ autEmail”)中給定;
您需要移動"
,當前它包含變量以及參數名稱,導致您沒有傳遞變量來綁定到所述參數(這就是為什么您收到錯誤提示您尚未傳遞足夠的參數的原因)。
$searchEmail = $pdo->prepare("SELECT * FROM users where email = :email");
$searchEmail->bindValue(":email", $autEmail);
注意:未定義的屬性:$ searchEmail-> execute中的PDOStatement :: $ execute;
您已經忘記了execute()
的()
括號,因此PHP正在查找稱為execute
而不是函數調用的PDO類的屬性。
$searchEmail->execute();
(感謝Prix)
編輯
您的問題現在是關於如何替換的:
$assoc = mysql_fetch_assoc($exeqr);
...具有等價的PDO。 在手冊中,有一個例子 :
$assoc = $searchEmail->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);
注意: fetchAll()
用於獲取多個結果。 如果您只期望一個結果(可能是這樣,但是您沒有限制查詢,因此返回多個結果是可行的),則應該只使用fetch()
:
$assoc = $searchEmail->fetch(PDO::FETCH_ASSOC);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.