0

私はこれについてしばらく考えていました。クエリが結果を返すかどうかを確認しようとしています。結果が返されない場合は何かをしたいと思っています。

PHP:

<?php
session_start();
$host = "localhost";
$user = "root";
$passw = "";
$con = mysql_connect($host, $user, $passw);


if (!$con)
{
    die('Could not connect: ' . mysql_error());
}
$json = $_REQUEST['json'];
$json = stripslashes($json);
$jsonobj = json_decode($json);

$me = $jsonobj -> me;
$other = $jsonobj -> other;
mysql_select_db("tinyspace", $con);
$result = mysql_query("SELECT * FROM friends WHERE (user_id = '" .$me. "' AND user_id2 = '" .$other. "') OR (user_id2 = '" .$me. "' AND user_id1 = '" .$other. "')");

if(mysql_num_rows($result) > 0)
{

}

ただし、ifステートメントは私に問題を与え続けます。
何かアドバイス?

4

5 に答える 5

1

念のために言っておきますが、何列に名前を付けましたuseridか? user_id、user_id1、user_id2 ? ひょっとして、下の行のuser_id1代わりということですか?user_id

$result = mysql_query("SELECT * FROM friends WHERE (user_id = '" .$me. "' AND user_id2 = '" .$other. "') OR (user_id2 = '" .$me. "' AND user_id1 = '" .$other. "')");

もしそうなら、それが結果を取得していない理由かもしれません。

編集:

$result = mysql_query("SELECT * FROM friends WHERE (user_id1 = '" .$me. "' AND user_id2 = '" .$other. "') OR (user_id2 = '" .$me. "' AND user_id1 = '" .$other. "')");
于 2012-10-18T14:21:33.017 に答える
0
$result = mysql_query("SELECT * FROM `friends` WHERE (`user_id1` = '" .$me. "' AND `user_id2` = '" .$other. "') OR (`user_id2` = '" .$me. "' AND `user_id1` = '" .$other. "')");
于 2012-10-18T20:25:27.173 に答える
0

試してみてください

<?php 
if($result == false){
   //what you want to do if the query returns nothing
}else{
   //handle the result
}

私の答えが間違っている、または質問とは逆だと思う人は、質問を最初からもう一度よく読んでください。

于 2012-10-18T14:21:18.580 に答える
0

mysql_num_rows()結果があるかどうかを確認するために使用しても問題なく、例で機能するはずです..

ただし、 への呼び出しが mysql_num_rows()期待どおりに機能しない場合 (つまり、常に false である場合)、ほとんどの場合、クエリに問題があります。 mysql_num_rows()は結果リソースを期待しており、クエリに問題がある場合、mysql_query は false を返します。

mysql_query() 呼び出しを次のように修正できます。

mysql_query("sql here") or die(mysql_error());

エラーがクエリにあるかどうかがわかります。クエリが期待どおりに機能していることを確認したら、mysql_num_rows() が正しく機能し始めます。

さらに、mysql_ 関数は非推奨です。Prepared Statements http://php.net/manual/en/pdo.prepared-statements.phpを参照してください。

于 2012-10-18T14:23:54.210 に答える
-1

あなたのコードは潜在的に脆弱であるように見えますが、意図したとおりに動作するはずです。これは、接続クラスで使用するものです

public function makeQuery(){
 if($result = mysqli_query($this->link, $this->sql)){
     if(mysqli_num_rows($result) != 0){
         while($r = mysqli_fetch_array($result)){
             $return[] = $r;
         }
         mysqli_free_result($result);
         return $return;
     }else{
         return 0;
     }
 }else{
     // db error here
 }

}

これは、クラスに $sql と $link の値を与えることを前提としています... しかし、整数の戻り値または配列の戻り値をチェックできます。整数 (0) の場合、行がなく、配列が返された行になります。エラーが発生した場合は、エラー ロジックに分類されます (この場合、私は自分自身にメールを送信します)。

于 2012-10-18T14:31:19.873 に答える