0

ちょっと、次のスクリプトが機能しておらず、遅れているので、助けを借りることができます。これは、http 投稿から ID の配列を受け取り、ユーザー名を取得することになっています。データベースにあることがわかっている単一のIDを送信すると、nullが返されます。スクリプトの何が問題になっていますか?

<?php
$friendArray[] = $_POST["friendId"];

$hostname = 'http://localhost/';
$dbname = 'MYDB';
$db_username = 'user';
$db_password = 'pass';
$options = array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', );

$inQuery = implode(',', array_fill(0, count($friendArray), '?'));

try {
    $dsn = "mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=".$dbname;
    $dbh = new PDO( $dsn, $db_username, $db_password, $options);
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false );
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sth = $dbh->prepare('SELECT USER_SCREEN_NAME USER WHERE USER_ID IN (' . $inQuery . ')');
    foreach ($friendArray[] as $k => $friend)
    {
        $sth->bindValue(($k+1), $friend);
    } 
    $sth->execute();
    $results = $sth->fetchAll(PDO::FETCH_ASSOC);
    $json=json_encode($results);
    echo $json;
}
catch(PDOException $e) {
    echo $e->getMessage();
}

$dbh = null;

?>

解決策: 私が見つけた主な問題は、SQL ステートメントに "FROM" がないことでした。その後、私はさらに多くの反復と問題を経験し、最終的に次のようになりました。もう 1 つの問題は、ループとバインディングが機能していないことでした。そのため、配列を適切な形式で取得すると、それを実行時に渡してうまくいきました。

<?php
$friendArray = array();
foreach ($_POST["friendId"] as $myFriend)
{
    $friendArray[] = $myFriend;
}

$hostname = 'http://localhost/';
$dbname = 'MYDB';
$db_username = 'user';
$db_password = 'pass';
$options = array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', );

$inQuery = implode('', array_fill(0, count($friendArray)-1, " OR USER_ID = ?"));

try {
    $dsn = "mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=".$dbname;
    $dbh = new PDO( $dsn, $db_username, $db_password, $options);
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false );
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sth = $dbh->prepare("SELECT USER_SCREEN_NAME FROM USER WHERE USER_ID = ?" . $inQuery . "");
    $sth->execute($friendArray);
    $results = $sth->fetchAll(PDO::FETCH_ASSOC);
    $json=json_encode($results);
    echo $json;
}
catch(PDOException $e) {
    echo $e->getMessage();
}

$dbh = null;

?>
4

1 に答える 1

1

コードのこの部分:

foreach ($friendArray[] as $k => $friend)

構文エラーが発生します。ここ$friendArrayに角括弧を含めないでください。[]

foreach ($friendArray as $k => $friend)
于 2012-10-12T07:05:46.690 に答える