1

这是一个 Android 应用程序,我使用的是用 php 编写的 web 服务。我有 3 个 php 脚本 - dbconnect.php(这包含所有 db 变量)、login.php(这将验证用户凭据并打开一个会话)和 showCases.php(它将返回从获取的 userID 变量中获取的票证列表login.php 脚本)

但是,由于某种原因,当我请求信息 showCases.php 时,我有:“用户 'ODBC'@'localhost' 的访问被拒绝(使用密码:否)”。我不太确定会话是否正确使用。

这是 login.php 脚本:

 //Displaying the error if sql query is incorrect
 if(!$result){
    die(mysql_error());
 }else{
    $row = mysql_fetch_assoc($result);
    $first_name = $row['first_name'];
    $id = $row['id'];
 }

 //If found, number of rows must be 1
 if($num_rows==0){    
   $success = 0;
 }else{
   //creating session
   session_start();
   session_register("$username");
   session_register("$password");
   $success = 1;  

 }
   $arr = array(
    array('username' => $username, 'id'=>$id,'success'=>$success, 'first_name'=>$first_name));
    #array('success'=> $success));

 echo json_encode((array('Username'=>$arr)));

 mysql_close();
 ?>

该脚本会将用户名数组返回给 android 应用程序以供其处理验证。验证后,android 应用程序将从此 php 脚本请求票证。

session_start();

#require('dbconnect.php');
require_once('login.php');

$response=array();
$response['infos'] = array();   

//execute the SQL query and return records
$result = mysql_query("SELECT cases.id, cases.account_id....  casesvisibility.user_id = '$id'......";

//Displaying the error if sql query is incorrect
if(!$result){
   die(mysql_error());
}

$num_rows = mysql_num_rows($result);
$arr = array();

if($num_rows!=0){
while ($row = mysql_fetch_assoc($result)) {
$arr['cases_id']=$row['cases.id'];
$infos[]=$arr;
}
}else{
#$arr['existingCases']=$row['0'];
$arr['cases_id']=0;
$infos[]=$arr;
}

#Echoing a JSONArray
print(json_encode(array('Cases'=>$infos)));
//close the connection
mysql_close();
?>

我不太确定这是我希望它实现的功能的编写良好的代码。当我从 android 应用程序调用此脚本时,我首先从登录脚本中获取 JSON_array,它告诉我:

{"Username":[{"username":"","id":null,"success":0,"first_name":null}]}id is 
Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in E:\wamp\www\mobile.dcl.mu\webserver\showCases.php on line 18

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in E:\wamp\www\mobile.dcl.mu\webserver\showCases.php on line 18

用户 'ODBC'@'localhost' 的访问被拒绝(使用密码:否)

我知道我正在尝试使用另一个 php 脚本中的变量。

你能帮我解决这个问题吗?

谢谢

4

3 回答 3

1

你在哪里创作$num_rows?可能您想将此代码放在顶部 login.php 中:

 //Displaying the error if sql query is incorrect
 if(!$result){
    die(mysql_error());
 }else{
    $num_rows = mysql_num_rows($result);
    if ($num_rows) {
            $row = mysql_fetch_assoc($result);
            $first_name = $row['first_name'];
            $id = $row['id'];
    }
 }
于 2013-02-19T11:15:33.790 回答
1

我认为您正在混淆会话数据库连接(如果我正确理解您的代码片段)。

请记住,对于服务器来说,每个请求都是一个全新的过程。您可以通过会话共享变量,但不能共享进程绑定资源,如数据库连接。

正如您的服务器告诉您的那样,在第二个请求中没有密码,甚至可能是错误的(默认?)数据库用户。

所以,你需要做的只是:

在每个可能的执行路径中提供数据库连接信息。即,如果您的 android 应用程序直接调用http://your.server/showCases.php,请将 dbconnect.php 也包含在 showCases.php 中。

我想你有过一次:在你的第二个脚本中,你有这一行:

#require('dbconnect.php');

再次尝试取消注释,它可能会让您离目标更近一步。

PS 纯mysql_*函数已弃用,请阅读 php.net 文档(或此处的其他问题)以了解有关这些函数的安全问题。升级您的脚本以使用 PDO 或 mysqli

于 2013-02-19T11:29:52.663 回答
0

您的数据库连接调用最有可能出现问题,您没有提供正确的用户名和/或密码。我怀疑缺少密码。检查您的数据库连接

$db_host = "localhost"; // database host
$db_name = "test";   // database name
$db_login = "root";  // database user
$db_pass= "*****"; // database password

$db = mysql_connect($db_host, $db_login, $db_pass);
mysql_select_db($db_name,$db);

这只是指示我所指内容的示例代码。此外,请确保在每个 php 文件中都包含此 db 连接文件。有多种方法可以使 db 连接可用于不同的 php 文件(其中 sql 调用获取 make)

于 2013-02-19T11:24:25.843 回答