我试图根据表中的结果数量运行不同的查询。
我有以下内容,但它只输出最后的文本,而不是'echo'数据?
有人能看出我做错了吗?
<?php
require 'dbconfig.php';
class User {
function checkUser($uid, $oauth_provider, $username, $email, $twitter_otoken, $twitter_otoken_secret)
{
$query = "SELECT * FROM `users` WHERE oauth_uid = '$uid' and oauth_provider = '$oauth_provider'";
$result = $DBH->query($query);
if (!empty($result)) {
echo 'user';
} else {
echo 'no user';
}
$DBH = null;
}
}
?>
Test page loads
致电课程
在另一页上,我用以下
打电话给我的班级 ...else {
$twitter_otoken=$_SESSION['oauth_token'];
$twitter_otoken_secret=$_SESSION['oauth_token_secret'];
$email='';
$uid = $user_info->id;
$username = $user_info->name;
$user = new User();
$userdata = $user->checkUser($uid, 'twitter', $username,$email,$twitter_otoken,$twitter_otoken_secret);
if(!empty($userdata)){
session_start();
$_SESSION['id'] = $userdata['id'];
$_SESSION['oauth_id'] = $uid;
$_SESSION['username'] = $userdata['username'];
$_SESSION['oauth_provider'] = $userdata['oauth_provider'];
header("Location: splash.php");
}
}
} else {
// Something's missing, go back to square 1
header('Location: login-twitter.php');
}
?>
配置
$host = 'localhost';
$dbname = 'dbname was here';
$user = 'access';
$pass = 'access';
try {
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch(PDOException $e) {
echo $e->getMessage();
}
?>
答案 0 :(得分:1)
它应该是什么
配置
$host = 'localhost';
$dbname = 'dbname was here';
$user = 'access';
$pass = 'access';
$opt = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass, $opt);
用户
class User {
function checkUser($uid, $oauth_provider)
{
global $DBH;
$query = "SELECT * FROM `users` WHERE oauth_uid=? and oauth_provider=?";
$stmt = $DBH->prepare($query);
$stmt->execute($uid, $oauth_provider);
return $stmt->fetch();
}
}
答案 1 :(得分:0)
您正在检查语句是否为空(),但PDO :: query()的结果是PDOStatement对象,而不是结果数据。
要获取数据,请查看PDOStatement的文档。您可以使用类似fetchObject()方法的内容。
此外,我建议使用PDO的能力来使用Prepared Statements,而不是直接查询。这将使您的应用程序更加安全。
然而,这并不能解释为什么它不起作用(在这种情况下不工作=没有回波数据)。因为它总是一个PDOStatement(或者 FALSE ,如果查询没有成功),你的if语句应该只评估为TRUE / FALSE。我认为这段代码不是没有输出的,但正如我在上面指出的那样它确实存在缺陷。