Php PDO赢得';我不能给出结果
所以,我今天从mysql切换到PDO,并试图让它运行,但不知怎么的,我没有得到任何结果 我的声明如下:Php PDO赢得';我不能给出结果,php,mysql,database,pdo,Php,Mysql,Database,Pdo,所以,我今天从mysql切换到PDO,并试图让它运行,但不知怎么的,我没有得到任何结果 我的声明如下: $serverConnector = new ServerConnector(); $db = $serverConnector->connectToServer(); $stmt = $db->prepare("SELECT * FROM `" . TABLE_USERS . "` WHERE `" . USER_NICKNAME . "` =:user_nick
$serverConnector = new ServerConnector();
$db = $serverConnector->connectToServer();
$stmt = $db->prepare("SELECT * FROM `" . TABLE_USERS . "` WHERE `" . USER_NICKNAME . "` =:user_nickname OR `" . USER_EMAIL . "` =:user_email;");
$stmt->execute(array(':user_nickname' => "'".$name_or_email."'", ':user_email' => "'".$name_or_email."'"));
while ($row = $stmt->fetchAll(PDO::FETCH_ASSOC)) {
$this->id = $row[USER_ID];
$this->joined = $row[USER_JOINED];
...
}
$db = null;
我尝试在Xampp上以纯SQL的形式执行此语句。在那里工作。但在这里不起作用。我已经检查了我传递的所有参数,一切都是正确的。不知怎的,程序根本不会进入while循环。ServerConnector只是通过PDO连接到数据库,并将PDO数据库对象返回给$db
谢谢
编辑:嗯,我在PHP5.4.7中使用最新的Xampp。默认情况下应启用PDO。我自己检查了php.ini文件,并且在那里也启用了它
编辑:这是我的ServerConnector类。已启用错误报告。虽然我不会得到任何:/
class ServerConnector {
public function connectToServer(){
$db = new PDO('mysql:host=' . DATABASE_HOST . ';dbname=' . DATABASE_NAME . ';charset=UTF-8',
DATABASE_USERNAME,
DATABASE_PASSWORD,
array(PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
return $db;
}
}
你不必在事先准备好的声明中引用:
$serverConnector = new ServerConnector();
$db = $serverConnector->connectToServer();
$stmt = $db->prepare("SELECT * FROM `" . TABLE_USERS . "` WHERE `" . USER_NICKNAME . "` =:user_nickname OR `" . USER_EMAIL . "` =:user_email;");
$stmt->execute(array(':user_nickname' => $name_or_email, ':user_email' => $name_or_email));
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$this->id = $row[USER_ID];
$this->joined = $row[USER_JOINED];
...
}
$db = null;
基于上面所说的关于不需要在
execute()
中添加引号的内容:
以下内容不需要在while循环中:
$row = $stmt->fetchAll()
这不需要在一段时间内循环。它以数组的形式返回整个记录集,因此您只能从该循环中获得一次迭代
您可以将其更改为
$stmt->fetch(PDO::fetch_ASSOC)
,也可以不使用while循环,并在$row
上迭代。您的问题缺少关键的东西:错误消息
似乎以下是对PDO问题最迫切的回答:
您真正的问题是缺少错误报告。所以
error_reporting(E_ALL);
收到所有PHP错误(如拼写错误的常量)的通知
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
在服务器连接器中,将收到PDO错误的通知
收到实际错误消息后,您可以自己解决,也可以在此处寻求帮助好的,用print\r($row)检查我的DB输出,发现我这里有一个二维数组,我的程序无法通过。表示我的所有信息都在$row[0][KEY]上,而不是在$row[KEY]上 固定:) 编辑:嗯,我也会发布我的代码。两个小时前也是这样,但没用。别问我为什么-。-“是这样工作的:
function receiveUserData( $name_or_email ) {
$serverConnector = new ServerConnector();
$db = $serverConnector->connectToServer();
$stmt = $db->prepare("SELECT * FROM `" . TABLE_USERS . "` WHERE `" . USER_NICKNAME . "` =:user_nickname OR `" . USER_EMAIL . "` =:user_email");
$stmt->execute(array(':user_nickname' => $name_or_email, ':user_email' => $name_or_email));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$this->user_id = $row[USER_ID];
$this->user_joined = $row[USER_JOINED];
$this->user_last_seen = $row[USER_LAST_SEEN];
$this->user_salt = $row[USER_SALT];
$this->user_nickname = $row[USER_NICKNAME];
$this->user_name = $row[USER_NAME];
$this->user_last_name = $row[USER_LAST_NAME];
$this->user_email = $row[USER_EMAIL];
$this->user_password = $row[USER_PASSWORD];
$this->user_save_password = $row[USER_SAVE_PASSWORD];
$db = null;
}
SQL语句中不应该包含尾随分号。好的。认为这是“好风格”。这没用though@crush真正地我习惯于用分号来结束它们。PHP特别说明不要包含
在SQL语句的文档中使用code>。如果您在一个查询中包含多个语句,那么我认为这是可以的。它不会打乱你的查询-只是建议你不要包含它。顺便说一句,mysql字符集的拼写是utf8
是的,试图解决我的问题,但没有成功:/谢谢你的建议anyhow@justbasti您确定设置了常量(表用户、用户ID等)和变量吗,有你想要的值吗?是的,所有东西都有我自己的设置文件,里面有所有这些常量,tripple也检查了它们。尽可能多地包含它们,这样我就不会错过任何地方,即使它毫无意义^^^^检查crush的答案,我忽略了那个答案,并更改了我的答案谢谢,已经这么做了。我只想将ServerConnector类编辑到我的帖子中,我还想添加一个,如果列名与对象的属性相同,则可以使用它直接获取对象$this
表示的任何对象。不过,它将返回该类的一个新实例。亲爱的,我会在修复此错误后立即尝试:)谢谢
function receiveUserData( $name_or_email ) {
$serverConnector = new ServerConnector();
$db = $serverConnector->connectToServer();
$stmt = $db->prepare("SELECT * FROM `" . TABLE_USERS . "` WHERE `" . USER_NICKNAME . "` =:user_nickname OR `" . USER_EMAIL . "` =:user_email");
$stmt->execute(array(':user_nickname' => $name_or_email, ':user_email' => $name_or_email));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$this->user_id = $row[USER_ID];
$this->user_joined = $row[USER_JOINED];
$this->user_last_seen = $row[USER_LAST_SEEN];
$this->user_salt = $row[USER_SALT];
$this->user_nickname = $row[USER_NICKNAME];
$this->user_name = $row[USER_NAME];
$this->user_last_name = $row[USER_LAST_NAME];
$this->user_email = $row[USER_EMAIL];
$this->user_password = $row[USER_PASSWORD];
$this->user_save_password = $row[USER_SAVE_PASSWORD];
$db = null;
}