Php 正在尝试将mysql select语句转换为PDO
我正在尝试从旧的MySQL库转换为PDO 为了使用我的旧MySQL代码读取数据,我使用: $assoc=mysql\u fetch\u assoc($exeqr) 对于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($
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;我