2014-10-09 57 views
0

我有以下代码:MySQL查询工作5.0.10,而不是在73年5月1日

/// GENERATE SQL FOR LOGIN 
$sql_login = " 
    SELECT 

    users.id, 
    users.email, 
    users.first_name, 
    users.last_name, 

     users.access_early_years, 
     users.access_early_years_news, 
     users.access_early_years_meetings, 
     users.access_early_years_bpn, 
     users.access_primary, 
     users.access_primary_news, 
     users.access_primary_meetings, 
     users.access_primary_bpn, 
     users.access_secondary, 
     users.access_secondary_news, 
     users.access_secondary_meetings, 
     users.access_secondary_bpn, 
     users.access_special, 
     users.access_special_news, 
     users.access_special_meetings, 
     users.access_special_bpn, 
     users.access_post_16, 
     users.access_post_16_news, 
     users.access_post_16_meetings, 
     users.access_post_16_bpn, 

    users.access_la_admin, 
    users.last_login, 
    users.login_count, 
    users.centre_id, 
    centres.name, 
    centres.email AS centre_email, 
    centres.active 

    FROM users 

    INNER JOIN centres 
    ON users.centre_id = centres.id 

    WHERE 
    users.email = ? 
    AND 
    users.password = ? 
    LIMIT 1 
"; 

echo $sql_login; 

// PREPARE THE STATEMENT 
$stmt_login = $conn->prepare($sql_login); 
if($stmt_login === false) { 
    trigger_error('Wrong SQL: ' . $stmt_login . ' Error: ' . $conn->error, E_USER_ERROR); 
    exit(); 
} 

// BIND THE PARAMETERS... s = string, i = integer, d = double, b = blob */ 
$stmt_login->bind_param('ss',$username,$password); 

// EXECUTE STATEMENT 
$stmt_login->execute(); 

$stmt_login->bind_result(

    $user_id, 
    $username, 
    $first_name, 
    $last_name, 
     $access_early_years, 
     $access_early_years_news, 
     $access_early_years_meetings, 
     $access_early_years_bpn, 
     $access_primary, 
     $access_primary_news, 
     $access_primary_meetings, 
     $access_primary_bpn, 
     $access_secondary, 
     $access_secondary_news, 
     $access_secondary_meetings, 
     $access_secondary_bpn, 
     $access_special, 
     $access_special_news, 
     $access_special_meetings, 
     $access_special_bpn, 
     $access_post_16, 
     $access_post_16_news, 
     $access_post_16_meetings, 
     $access_post_16_bpn, 
    $access_la_admin, 
    $last_login, 
    $login_count, 
    $centre_id, 
    $centre_name, 
    $centre_email, 
    $centre_active 



); 


// SET THE SESSIONS AND LOG THE USER IN 
while ($stmt_login->fetch()) { 

// DO STUFF 

} 

一切都正常运行的PHP版本5.4.24和MySQL 5.0.10运行IIS服务器。

但是,当使用运行plesk的mysql 5.1.73传输到PHP 5.5.14版本时,它不会。

它不会获取任何数据。

当使用phpmyadmin查询数据库时,将使用相同的查询来复制此内容。一个取数据,一个没有。两个数据库都是对方的直接副本。

我拉我的头发!有任何想法吗?

更新:与另一个准备好的语句进行了测试,一切都很好(此语句是一个UPDATE而不是SELECT - 所以我看不到任何数据库用户权限问题)。

+0

首先要验证的是,PHP不发出任何警告或错误。总是在开发/测试代码'error_reporting(E_ALL); ini_set('display_errors',1);'在脚本的顶部。 – 2014-10-09 13:52:10

+0

这个查询在5.0/5.1之间肯定没有关系。由于拥有''''占位符,你显然不能直接复制PHPMyAdmin中的PHP代码。你确定连接的用户对两个数据库有相同的访问权吗? – 2014-10-09 13:53:36

+0

通过删除'WHERE'子句来调试。 (这表明密码被存储在纯文本中,这是非常不安全的。请回顾一下[你如何在PHP中使用bcrypt进行密码哈希处理](https://stackoverflow.com/questions/4795385/how-do-you-use -bcrypt-for-hashing-passwords-in-php)来改进选项,特别是因为你有PHP 5.5在你的处置) – 2014-10-09 13:55:37

回答

0

好吧。由于某种原因,INNER JOIN不想在较新版本的mySQL上工作,所以我将其更改为LEFT JOIN并且都工作正常。我仍然困惑,为什么

+0

这是不可能的....如果正在使用'LEFT'而不是'INNER',那么表'users'在表中没有任何有效中心'centres' – Sal00m 2014-10-10 11:51:40

相关问题