簡體   English   中英

試圖將mysql select語句轉換為PDO

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM