Php 正在尝试将mysql select语句转换为PDO

Php 正在尝试将mysql select语句转换为PDO,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,我正在尝试从旧的MySQL库转换为PDO 为了使用我的旧MySQL代码读取数据,我使用: $assoc=mysql\u fetch\u assoc($exeqr) 对于PDO,我试图用一个foreach来实现这一点,就像我在使用PDO的代码中所做的那样,但它不起作用 你能看到这里有什么不对劲吗 使用MySQL的我的旧ode: <?php if(isset($_POST['sendLogin'])) { $f['email'] = mysql_real_escape_string($

我正在尝试从旧的MySQL库转换为PDO

为了使用我的旧MySQL代码读取数据,我使用:

$assoc=mysql\u fetch\u assoc($exeqr)

对于PDO,我试图用一个
foreach
来实现这一点,就像我在使用PDO的代码中所做的那样,但它不起作用

你能看到这里有什么不对劲吗

使用MySQL的我的旧ode:

<?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';
        }
    }
}

警告:PDOStatement::bindValue()至少需要2个参数,1个参数在$searchEmail->bindValue(“:email,$autEmail”)中给出

您需要移动
,当前它包括变量以及参数名称,导致您没有传入绑定到所述参数的变量(这就是为什么您会收到错误,告诉您没有传入足够的参数)

注意:未定义的属性:PDOStatement::$executein$searchEmail->execute;

您忘记了
execute()
中的
()
括号,因此PHP正在查找名为
execute
的PDO类的属性,而不是函数调用

$searchEmail->execute();
(谢谢大奖赛)

编辑

现在,您的问题是如何替换此:

$assoc = mysql_fetch_assoc($exeqr);
…与PDO等效:

注意:
fetchAll()
用于获取多个结果。如果您只需要一个结果(可能是这样,但您没有限制查询,因此可以返回多个结果),则应使用
fetch()

警告:PDOStatement::bindValue()至少需要两个参数,其中一个参数在$searchEmail->bindValue(“:email,$autEmail”)中给出;

您需要移动
,当前它包括变量以及参数名称,导致您没有传入绑定到所述参数的变量(这就是为什么您会收到错误,告诉您没有传入足够的参数)

注意:未定义属性:PDOStatement::$searchEmail->execute中的$execute

您忘记了
execute()
中的
()
括号,因此PHP正在查找名为
execute
的PDO类的属性,而不是函数调用

$searchEmail->execute();
(谢谢大奖赛)

编辑

现在,您的问题是如何替换此:

$assoc = mysql_fetch_assoc($exeqr);
。。。与PDO等效:

注意:
fetchAll()
用于获取多个结果。如果您只希望得到一个结果(可能是这样,但您没有限制查询,因此可以返回多个结果),那么应该使用
fetch()

警告:PDOStatement::bindValue()至少需要2个参数,1个参数在$searchEmail->bindValue(“:email,$autEmail”)中给出

您需要移动
,当前它包括变量以及参数名称,导致您没有传入绑定到所述参数的变量(这就是为什么您会收到错误,告诉您没有传入足够的参数)

注意:未定义的属性:PDOStatement::$executein$searchEmail->execute;

您忘记了
execute()
中的
()
括号,因此PHP正在查找名为
execute
的PDO类的属性,而不是函数调用

$searchEmail->execute();
(谢谢大奖赛)

编辑

现在,您的问题是如何替换此:

$assoc = mysql_fetch_assoc($exeqr);
…与PDO等效:

注意:
fetchAll()
用于获取多个结果。如果您只需要一个结果(可能是这样,但您没有限制查询,因此可以返回多个结果),则应使用
fetch()

警告:PDOStatement::bindValue()至少需要两个参数,其中一个参数在$searchEmail->bindValue(“:email,$autEmail”)中给出;

您需要移动
,当前它包括变量以及参数名称,导致您没有传入绑定到所述参数的变量(这就是为什么您会收到错误,告诉您没有传入足够的参数)

注意:未定义属性:PDOStatement::$searchEmail->execute中的$execute

您忘记了
execute()
中的
()
括号,因此PHP正在查找名为
execute
的PDO类的属性,而不是函数调用

$searchEmail->execute();
(谢谢大奖赛)

编辑

现在,您的问题是如何替换此:

$assoc = mysql_fetch_assoc($exeqr);
。。。与PDO等效:

注意:
fetchAll()
用于获取多个结果。如果您只希望得到一个结果(可能是这样,但您没有限制查询,因此可以返回多个结果),那么应该使用
fetch()



非常感谢。但我仍然有这样一个:注意:未定义的属性:PDOStatement::$executein$searchEmail->execute;我猜是$searchEmail->execute();谢谢你,你能看看用foreach这个方法是否正确吗?因为我没有那个错误,但当我输入正确的电子邮件和密码时,我的回音“电子邮件不存在”@John23您不需要任何循环,因为您只想检索单个结果<代码>$result=$searchEmail->fetch(PDO::fetch_OBJ);echo$result->email,“-”$result->pass,“\n”
并且你应该避免在会话中保留密码,如果另一个用户使用该会话,他将能够接管该用户,因此你应该保留密码,并根据用户请求的操作的严重性请求密码。但是我需要访问我的用户字段,就像我使用mysql_fetch_assoc($exeqr)时一样,所以我认为foreach是一个很好的解决方案,但它不起作用!非常感谢。但我仍然有这样一个:注意:未定义的属性:PDOStatement::$executein$searchEmail->execute;我