1

私のウェブサイトにいる Facebook の友達を基本的に見つけるコードを書こうとしています。phpmyadmin でクエリを実行することに成功しましたが、何らかの理由で php からコードを実行しようとすると機能しません

これがphpコードです。$string エコーを取得して mysql に配置すると、問題なく動作しますが、何らかの理由で php で実行すると、クエリは結果を返しません。

$fql = "SELECT uid FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = 100000903067831) AND is_app_user = 'true'";
        $param  =   array(
            'method'    => 'fql.query',
            'query'     => $fql

        );
    $this->load->library('facebook');

    echo  $this->facebook->getLoginUrl();
    $fqlResult   =   $this->facebook->api($param);
    $userIDarray = array();
    foreach($fqlResult as $result)
    {
        echo $result['uid']."<br>";
        array_push($userIDarray, intval($result['uid']));
    }
    $string = implode(', ',$userIDarray);
    echo $string;
    $vars = array($string);
    $query = $this->db->query("SELECT * FROM users WHERE users.facebook_id IN (?)", $vars);
    echo var_dump($query);
    foreach($query->result() as $data)
    {
        echo var_dump($data);
    }
4

1 に答える 1

0

1 つの で複数のパラメータを渡すことはできません?

IN連結を使用して、自分 でオプションを構築する必要があります。

そのようです:

foreach($fqlResult as $result)
{
    echo $result['uid']."<br>";
    array_push($userIDarray, intval($result['uid']));
}
$string = implode(', ',$userIDarray);
$query = $this->db->query("SELECT * FROM users WHERE users.facebook_id 
                           IN ('.$string.')");

$userIDarray 内のアイテムが適切にエスケープされていることを確認する必要があることに注意してください。
パラメータを使用していませんが、これらの値を SQL に挿入しているため、SQL インジェクション攻撃の危険にさらされています。

intval文字列にのみ含まれることを保証する0..9ものを通過させる-ので、ここでは安全です。
データが数値でない場合は、mysqli_real_escape_stringPDO のパラメーターをバイパスしているという事実を補うために使用する必要があります。

于 2013-10-09T01:09:11.607 に答える