<?php
try {
$nombre=$_GET["nombre"];
$password=$_GET["pass"];
$base=new PDO ("mysql:host=localhost; dbname=te_la_juegas","root", "");
$base->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sql="select nombre, pass from usuarios where nombre= :nombre and pass= :pass";
//--EL--POKEMON--
$pokemon="select pokemon from usuarios where nombre= :nombre ";
$resultado=$base->prepare($sql);// PARA COMPROBAR QUE ESTAN EN BASE DATOS
$eleccion=$base->prepare($pokemon);//PARA SABER EL POKEMON
$resultado->bindValue(":nombre",$nombre);
$resultado->bindValue(":pass",$password);// PARA COMPROBAR QUE ESTAN EN BASE DATOS
$eleccion->bindValue(":nombre",$nombre);//PARA SABER EL POKEMON
$resultado->execute();
$eleccion->execute();
//******************************************************************
$numero_registro=$resultado->rowCount();
$inicial=mysql_fetch_row($pokemon);
if ($numero_registro!=0) {
if ($inicial=="charmander") {
# code...
}elseif ($inicial=="vulvasaur") {
# code...
}else {
}
}else {
header("location:index.php");
}
} catch (Exception $e) {
die("Error".$e->getMessage());
}
?>
在提供可能的解决方案之前,我想指出一些关于您的代码的事情。
当心 PDO 配置错误:对我来说,在查询我们的数据库时,PDO 是最好的选择。但是如果没有正确配置它可能是危险的。这种良好的配置意味着在建立连接时将属性设置
PDO::ATTR_EMULATE_PREPARES
为false
...否则您可能成为SQL 注入的受害者,正如我在此答案的第2点中所解释的那样。使用 rowCount 不是了解是否有数据的最佳选择。尽管它是尝试了解查询中的行数的最流行的方法,但rowCount 并不是最好的选择。相同的 PHP 手册说如下:
很多人似乎没有读过,并继续使用 rowCount 作为灵丹妙药。
在 PDO 中,要知道是否有数据,您只需要请求数据
false
本身,因为如果没有数据,请求数据的方法会返回。因此,如果您执行以下操作:
如果您仍然想计算行数,请使用 a
SELECT COUNT(*)
,它将安全且真实地返回该 table中有多少行。您可以在 PHP Delusions 上看到这篇有趣的文章。
现在我要回答你的问题。
要将查询结果存储在变量中,过程如下:
注意:还有其他存储结果集的方法,您可以在PHP 手册中查阅它们。
推荐
正如我一开始所说,在我看来,PDO 是查阅我们数据的最佳选择。
当我们有一个专门用于处理连接和安全发送查询的类时,这项工作会变得相当容易。有兴趣的可以试试这个类:PHP-PDO。
完整的代码示例
VER DEMO EN PHPFIDDLE
结果:
测试 print_r 返回:
我们用数据生成的表是这样的: