0

2つのテーブルからデータを取得して結果をエコーアウトしようとしていますが、SQLは正しいように見えますが、引数が無効であることが示されています。ここに私のコードがあります:

// Retrieve all information related to this post
    function get_post_data($post_id){

        //test the connection
        try{
            //connect to the database
            $dbh = new PDO("mysql:host=localhost;dbname=mjbox","root", "usbw");
        //if there is an error catch it here
        } catch( PDOException $e ) {
            //display the error
            echo $e->getMessage();
        }

        $sql = 'SELECT * FROM mjbox_images JOIN mjbox_posts USING (post_id) WHERE post_id = $post_id';
        $result = $dbh->query( $sql );

        foreach($result as $row):

            echo $row['img_id'];

        endforeach;

    }
4

2 に答える 2

1

文字列は一重引用符で囲まれているため、クエリ内の$post_idは展開されません。

それは次のようにうまく機能するはずです:

$sql = "SELECT * FROM mjbox_images JOIN mjbox_posts USING (post_id) WHERE post_id = $post_id";

また:

$sql = 'SELECT * FROM mjbox_images JOIN mjbox_posts USING (post_id) WHERE post_id = '.$post_id;
于 2012-06-05T16:14:33.177 に答える
0

エラーをスローするようにPDOに指示する必要があります。

$dbh = new PDO("mysql:host=localhost;dbname=mjbox","root", "usbw");
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

それはおそらく何が起こっているかを教えてくれるでしょう(pdoオブジェクトをその前の行に作成するときの潜在的な問題を除いて...)。

また、潜在的なSQLインジェクションや不正な形式のクエリの問題を回避するために、プリペアドステートメントに切り替えることをお勧めします。

そして、それがあなたの本当のパスワードではないことを願っています...

于 2012-06-05T16:08:49.953 に答える