INNER JOINステートメントのエラー

私は INNER JOIN クエリを記述しようとしています。私は、2つの異なるテーブルにある行/情報を取得したかったのです。ここに私がしようとしているものがあります:

テーブル名は:studentsとmain_table

$sql =mysql_query ("SELECT main_table.maric_no, main_table.academic_session, main_table.semester, 
main_table.course_name, main_table.total, students.first_name, students.last_name, 
students.other_name, students.level 
FROM main_table INNER JOIN students ON 
main_table.matric_no = students.matric_no 
WHERE main_table.matric = mysql_real_escape_string($_POST[matric_no]'"); 

$number_cols = mysql_num_fields($sql); 

エラーメッセージは次のとおりです。

ERROR: mysql_num_fields() expects parameter 1 to be resource, boolean given in c:\filepath on line Number..

問題はどこから来るのでしょうか?

0
エラーがあるかどうかを調べるには、クエリの最後に必ずまたはdie(mysql_error())を追加します。
追加された 著者 JJJ,
あなたのエラーは、 mysql_num_fields の誤った使用によるものと思われます。あなたが本当に望んでいるのは、 mysql_query です。
追加された 著者 StudyOfCrying,
追加された 著者 StudyOfCrying,
mysql_num_fields呼び出しの直後にmysql_error()の結果を出力できますか?
追加された 著者 deltree,
私は最初のSELECT文でmysql_queryをインクルードするようにコードを編集しました。
追加された 著者 user1183307,

6 答え

http://php.net/manual/en/function.mysql-num -fields.php

SQL文字列ではなく、クエリ結果を mysql_num_fields に渡す必要があります。試してください:

$res = mysql_query($sql);
$number_cols = mysql_num_fields($res);
4
追加された
どのようにそれはエラーがSQLクエリ文字列にあることを述べていないときにプラス投票を受け取った?
追加された 著者 Melvin Protacio,
私は最初にクエリを実行しました。しかし、私はまだ同じエラーが発生しています。ありがとう
追加された 著者 user1183307,
mysql_real_escape_string($_POST[matric_no]

二重引用符で囲まれた文字列の中で、そのような関数呼び出しを使用することはできません。

"WHERE main_table.matric = '" . mysql_real_escape_string($_POST[matric_no]) . "'");

それは次のようになります:

$sql = mysql_query ("SELECT main_table.maric_no, main_table.academic_session, main_table.semester, 
main_table.course_name, main_table.total, students.first_name, students.last_name, 
students.other_name, students.level 
FROM main_table INNER JOIN students ON 
main_table.matric_no = students.matric_no 
WHERE main_table.matric = ". mysql_real_escape_string($_POST[matric_no]) . "'"); 
1
追加された

一見すると2つのエラー:

  1. mysql_real_escape_string() is a PHP function, not a mysql-function. It is used to make data safer before using it in a mysql-query.
  2. Your $_POST-variable isn't assigned properly.

これを次のようにフォーマットします。

$sql = mysql_query("
    SELECT M.maric_no, M.academic_session,  
        M.semester, M.course_name, M.total, 
        S.first_name, S.last_name, 
        S.other_name, S.level 
    FROM main_table M 
    INNER JOIN students S ON M.matric_no = S.matric_no 
    WHERE M.matric = '"
    .mysql_real_escape_string($_POST['matric_no'])
    ."'"); 

私はテーブル名にエイリアスを追加する自由を取った、これはあなたのSQLステートメントをかなりクリーンアップします。

他のエラーもあります(間違ったフィールドは、 main_table.matric_no ではなく、 main_table.matric フィールドに実際にWHEREステートメントがありますか?これを分析して、テーブルの詳細を提供する必要があります。

1
追加された

mysql_query() returns Boolean False when it fails with an error. Since there is an error in your SQL, $sql equals False.

mysql_num_fields() expects you to pass in a result set, not a Boolean value, hence the error: ERROR: mysql_num_fields() expects parameter 1 to be resource, boolean given.

PHP関数である mysql_real_escape_string()をクエリに直接組み込んでいます。これの代わりに:

"WHERE main_table.matric = mysql_real_escape_string($_POST[matric_no]'");"

matric が数字であると仮定して、これ以上のものを試してみましょう:

"WHERE main_table.matric = ". mysql_real_escape_string($_POST[matric_no]);

PHPで mysql_error()関数を使用して、MySQLがSQLでのエラーの内容を確認してください。

1
追加された

mysql_query returns false if there is an error, thus the boolean result and not a resource. try this

$sql =mysql_query ("SELECT main_table.maric_no, main_table.academic_session, main_table.semester, 
main_table.course_name, main_table.total, students.first_name, students.last_name, 
students.other_name, students.level 
FROM main_table INNER JOIN students ON 
main_table.matric_no = students.matric_no 
WHERE main_table.matric = '".mysql_real_escape_string($_POST[matric_no])."'"); 
1
追加された
@KanyinsolaOyesanmi: mysql_real_escape_string はPHP関数であり、文字列の中に入れることはできません。
追加された 著者 Rocket Hazmat,
はい、私は知っていますが、問題はどこから来ていますか?それは質問の構造ですか、それとも何ですか?私はインナー・ジョインを使っていません....... ON ......どこが正しくありますか?
追加された 著者 user1183307,

まず問合せを実行する必要があります。

$result = mysql_query($sql);
$num_cols = mysql_num_fields($result);
0
追加された
var_dump($ result); を実行するとどうなりますか?
追加された 著者 ianbarker,
私はやったが、同じ問題をまだ示している。
追加された 著者 user1183307,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com