1

これは Android アプリケーション用で、PHP で記述された Web サービスを使用しています。3 つの php スクリプトがあります - dbconnect.php (これにはすべての db 変数があります)、login.php (これはユーザーの資格情報を検証し、セッションを開きます)、および showCases.php (これは、から取得した userID 変数からチケットのリストを返します) login.php スクリプト)

しかし、何らかの理由で、情報 showCases.php を要求しているときに、「ユーザー 'ODBC'@'localhost' のアクセスが拒否されました (パスワードを使用: NO)」というメッセージが表示されます。セッションが正しく使用されているかどうかはよくわかりません。

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' のアクセスが拒否されました (パスワードを使用: NO)

別の php スクリプトの変数を使用しようとしていることは理解しています。

この問題を教えてください。

ありがとうございました

4

3 に答える 3

1

セッションデータベース接続を混同していると思います(コードスニペットを正しく理解している場合)。

サーバーの場合、各リクエストは完全に新しいプロセスであることに注意してください。セッションを介して変数を共有することはできますが、db接続のようなプロセスにバインドされたリソースを共有することはできません。

サーバーが言っているように、2番目のリクエストではパスワードがなく、間違った(デフォルト?)dbユーザーが指定されている可能性があります。

だから、あなたがする必要があるのは単にこれです:

可能なすべての実行パスでデータベース接続情報を提供します。つまり、Androidアプリがhttp://your.server/showCases.phpを直接呼び出す場合は、showCases.phpにもdbconnect.phpを含めます。

私はあなたが一度それを持っていたと思います:あなたの2番目のスクリプトであなたはこの行を持っています:

#require('dbconnect.php');

もう一度コメントを外してみてください。目標に一歩近づく可能性があります。

PS純粋mysql_*関数は非推奨です。これらの関数に関するセキュリティ上の懸念については、php.netドキュメント(またはここにある他の質問)をお読みください。PDOまたはmysqliを使用するようにスクリプトをアップグレードします

于 2013-02-19T11:29:52.663 に答える
1

どこで作成します$num_rowsか?おそらく、このコードをtop 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 に答える
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接続ファイルを必ず含めてください。さまざまなphpファイルでdb接続を利用できるようにするさまざまな方法があります(SQL呼び出しがmakeを取得する場所)

于 2013-02-19T11:24:25.843 に答える