【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

外部サーバー(192.168.1.5)から、データベース(192.168.1.6)の情報を取り出すことが可能なPHPを作っています。

問題点
$sqlのパスワードの部分を
$sql = "SELECT * FROM usr WHERE `userId`=$userId_e AND `pw`='p3kchds243j5'";
というように、直接記載すれば問題なく外部サーバー(192.168.1.5)でデータベース(192.168.1.6)の情報をGETできますが、
$sql = "SELECT * FROM usr WHERE `userId`=$userId_e AND `pw`=$pwd_e";や
$sql = "SELECT * FROM usr WHERE `userId`=$userId_e AND `pw`=$pwd2_e";
だと、なぜかGETすることができません。

同じ条件で指示しているはずなのですが、何が問題なのでしょうか?

尚、外部サーバーからのGET指示はnumber,userId,pwdでありここでの間違いはありません。

よろしくお願いいたします。

【データベース(192.168.1.6)のPHP】

<?php
header('Access-Control-Allow-Origin: *');
require_once('/home/sql/login.php');
//外部サーバー(192.168.1.5)からGET送信されたデータを受け取る
$number = $_GET['number'];
$userId = $_GET['userId'];
$pwd = $_GET['pwd'];
$pwd2 = 'p3kchds243j5';
//GET送信されたデータをエスケープ
$number_e = mysql_real_escape_string($number);
$userId_e = mysql_real_escape_string($userId);
$pwd_e = mysql_real_escape_string($pwd);
$pwd2_e = mysql_real_escape_string($pwd2);

mysql_set_charset('utf8');
$sql = "SELECT * FROM usr WHERE `userId`=$userId_e AND `pw`=$pwd_e";

$result = mysql_query($sql);

if (mysql_num_rows($result) > 0){

while($row = mysql_fetch_object($result)){
$string11 .= $row->a1;
$string12 .= $row->userId;
$string13 .= $row->pw;
$string14 .= $row->nickname;

}

}else{
$string = "No matches!";
}

//GET送信されてきたデータの確認
if($number == 9999){
//渡すデータを配列で格納
$array_data = array(string11=>$string11, string12=>$string12, string13=>$string13, string14=>$string14);
}
//ヘッダーの設定
header('Content-type:application/json; charset=utf8');
//渡すデータ(配列)をJSON形式にデコードして出力
echo json_encode($array_data);
?>

A 回答 (3件)

Ajaxがどうのこうのという話ではなく、そもそも単純にSQLがきちんと書けていないだけではないかと思いますけど。




「SELECT * FROM usr WHERE `userId`=$userId_e AND `pw`=$pwd_e」
というコードだったら「$pwd_e」の値が「p3kchds243j5」の場合
「SELECT * FROM usr WHERE `userId`=$userId_e AND `pw`=p3kchds243j5」
になりますよ。
「SELECT * FROM usr WHERE `userId`=$userId_e AND `pw`='p3kchds243j5'」
にはなりませんよ。

以下のようなコードにするのがいいのではないかとPHPの公式マニュアルには書いてあります

PHP: mysql_real_escape_string - Manual
http://php.net/manual/ja/function.mysql-real-esc …
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
    • good
    • 0
この回答へのお礼

$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password))
で出来ました。ありがとうございました。

お礼日時:2014/08/24 04:59

$sql = "SELECT * FROM usr WHERE `userId`=$userId_e AND `pw`=$pwd_e";


  ↓
$sql = "SELECT * FROM usr WHERE `userId`='$userId_e' AND `pw`='$pwd_e'";
では?
    • good
    • 0
この回答へのお礼

$sql = "SELECT * FROM usr WHERE `userId`='$userId_e' AND `pw`='$pwd_e'";
で出来ました!
ありがとうございます!!

お礼日時:2014/08/24 04:58

ブラウザのアドレス欄に入力して期待通り受信できるのなら、JavaScriptのコードに問題があるのでは?


・送信データの生成方法
・送信方法
・(サーバーの一連の処理)
・受信方法
・受信データの表示方法
1つでもミスがあれば期待通りの動作はしません。
    • good
    • 0
この回答へのお礼

SQLの記載ミスでした。
ご回答いただきありがとうございました

お礼日時:2014/08/24 04:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報