web-dev-qa-db-ja.com

mysqli_queryは少なくとも2つのパラメーターを期待します

この mysqli_queryコマンドを実行すると、以下のエラーが発生します

mysqli_query("INSERT INTO `counter`.`hits` (`page_hits`) VALUES ('".$hits."')"); 

警告:mysqli_query()は少なくとも2つのパラメーターを期待します。1つは

このエラーメッセージの意味と修正方法を教えてください。

12
Joe Winfield

ページの前半のどこかでデータベースに作成した接続を指定する必要があります。その変数をクエリに入れる必要があります。 $ conという変数を作成したとします。次に、コードは次のようになります。

mysqli_query($con,"INSERT INTO `counter`.`hits` (`page_hits`) VALUES ('".$hits."')"); 
18
RonnyRules

manual から

Procedural style

mixed mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )

$link変数と$query変数がわかります。

つまり、有効なmysqliリンクリソースと実行するクエリを関数に渡す必要があります。これにより、使用するサーバーへの確立された接続を関数に認識させることができます。

リンクリソースは以下を使用して作成できます。

手続き型のみ:mysqli_connect()またはmysqli_init()によって返されるリンク識別子

その方法の例は、前述のマニュアルページにあります。

4
Ben Swinburne

Mysql_queryとmysqli_queryを混同しているようです。前者は最初のパラメータとしてsqlステートメントを受け入れ、後者は最初のパラメータとしてリンク識別子(Mysqli :: connectによって作成)を期待し、2番目のパラメータとしてステートメントを期待します。

2つの拡張機能は互いに互換性がありません。どちらかを選択し、接続方法、クエリの実行方法などのマニュアルページを読んで、もう一方が存在しないことをお勧めします。どちらを選択するかはあなた次第です。mysqliは機能が豊富ですが、結果としてより複雑になります。

3
erm410

次のいずれかのエラーが発生した場合:

mysqli_query()は少なくとも2つのパラメーターを想定し、1つは指定されています

mysqli_select_db()は正確に2つのパラメーターを期待します

mysqli_real_escape_string()は正確に2つのパラメーターを期待します

これは、これらの関数に必須パラメーターを渡していないことを意味します。 MySQLi手続き型関数は、最初のパラメーターが有効なMySQLi接続リンクであることを想定しています。

たとえば、 _mysqli_query_ は、最初の引数としてデータベースリンク、2番目の引数として実際のSQLクエリを想定しています。

スクリプトの最初のどこかに、これまたは同様の接続コードがあると仮定します。

_mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = mysqli_connect($Host, $user, $pass, $db);
mysqli_set_charset ($mysqli, 'utf8mb4');
_

_$mysqli_に保存された接続リンクを使用して、最初の引数として渡すことができます。

_mysqli_query($mysqli, "INSERT INTO `counter`.`hits` (`page_hits`) VALUES ('".$hits."')"); 
_

ほとんどのmysqli手続き関数では、接続を引数として渡す必要があります。ただし、より簡単なオプションは、オブジェクト指向スタイルに切り替えることです。 OOPでは、SQLのみを単一の引数として渡してオブジェクトのメソッドを呼び出します。

_mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli($Host, $user, $pass, $db);
$mysqli->set_charset('utf8mb4');

$mysqli->query("INSERT INTO `counter`.`hits` (`page_hits`) VALUES ('".$hits."')"); 
_

警告!

クエリを手動で作成する代わりに、パラメーター化された準備されたステートメントを使用する必要があります。 mysqli_query()は、SQLに入力を渡していない場合にのみ使用してください。たとえばINSERTの場合のように、入力を渡す場合は常に、パラメーターバインディングを使用する必要があります。 mysqli_query()呼び出しを次のように置き換えることができます。

_$stmt = $mysqli->prepare('INSERT INTO `counter`.`hits` (`page_hits`) VALUES (?)');
$stmt->bind_param('s', $hits);
$stmt->execute();
_
1
Dharman

mysqli_query 2つのパラメータを除いて、最初の変数はmysqli_connect同等の変数、2番目は指​​定したクエリです

$name1 = mysqli_connect(localhost,db_username ,db_pswd ,db_name );

$name2 = mysqli_query($name1,"INSERT INTO `counter`.`hits` (`page_hits`) VALUES ('".$hits."')");