2016-12-10 11 views
1

私はPHPページindex.phpを持っています。このページでは、MySQLデータベース(using mysqli)との接続を作成し、いくつかのMySQLクエリを実行しています。 index.phpファイルの先頭に接続($connection = new mysqli("localhost", "root", "");)を開き、index.phpファイルの最後に接続($connection->close())を閉じています。 index.phpのHTML <head>部分内

は、私はいくつかのMySQL SELECTクエリを行い、別のPHPファイルload_more_data.phpにAJAX呼び出しを行うjQueryのスクリプトが含まれています。このJQueryスクリプトは、ボタンのクリックで呼び出されます。

load_more_data.phpファイルでは、私は同じデータベース($connection = new mysqli("localhost", "root", "");を呼び出して)と新しい接続を開き、クエリを実行します。 問題があります:$connection->query($sql)からindex.phpまでクエリを実行すると、正常に実行され、正しいデータセットが返されます。同じ質問をload_more_data.phpから実行すると、$connection->query($sql)が返されます。FALSEが返されます。

質問:

私は2つの質問があります。

  1. をこれは正しいアプローチですか?それはデータベースに問い合わせる必要がある各ファイルに新しい接続オブジェクトを作成していますか?またはサーバー側(index.php)からAJAXがその接続オブジェクトをサーバー側(load_more_data.php)に送信するクライアント側(JQueryスクリプト)に1つの接続オブジェクトを渡す方法がありますか?このことについてどうすればいいですか? load_more_data.phpから呼び出された場合、それはindex.phpから呼び出され、データベースからフェッチされた適切な予想されるデータセットを返すとき

  2. なぜ$connection->query($sql)は、FALSEを返すのですか?

+3

あなたの 'load_more_data.php'ファイルに関連するコードを共有できますか? falseを返している場合は、 '$ connection-> error'であなたを待っているエラーがあるはずです。 – Qirel

+4

リクエストがAJAXで行われたかどうかはPHPでもMySQLでも気にしません。クエリにはおそらくエラーが含まれています。コードを投稿し、コードにエラーチェックを追加します。 –

答えて

1

2つの質問にお答えします。

PHPはサーバー側のスクリプト言語です。 JavaScript(これにはAjaxとJQueryが含まれています)はクライアント側のスクリプト言語です。

データベースから価値を得るためにjavascriptを使用するには、通常、データベースに接続するためにajaxを使用してサーバーを経由する必要があります。ほとんどのデータベースはセキュリティとして外部アクセスを許可しないためです予防措置。

ajaxを使用してphpファイルを呼び出す場合、呼び出し元のファイルにファイルが含まれていないため、そのファイルのデータベースに接続する必要があります。つまり、呼び出し元のファイルに新しい接続が必要です。あなたがajaxから呼び出すファイル。そうしないと、データにアクセスできなくなります。

サーバからクライアントへの接続を渡すと、クライアントはサーバからクライアントに、またサーバに再び渡されたデータを見ることができるため、クライアントはデータベースにアクセスして悪用することができます。

2.

シャーロットDunoisが言うように

は、それはあなたが一つの言語ではなく、別の言語を使用してデータベースを照会するかどうかを重要ではありません。偽

$connection->query($sql) 

返し、クエリの誤差が、この場合は$sqlの値であることに、そこにある:あなたがあなたのクエリから取得した結果の背後にある究極の理由は、以下の通りです。別の原因は、データベースに接続して選択していない可能性があります。そのエラーが何であるかを知るための唯一の方法は、あなたにそれが通知されていない場合です。mysqli_error

+0

ありがとうございます、私のクエリ '$ sql'は正しいです。私のエラーは「データベースが選択されていません」でした。しかし、私はあなたの説明から学んだように、本当にありがとう。 – Solace

+1

私はそれを答えに加えますが、私はそれを間接的に質問1に答えました。しかしながら。 –

関連する問題