久しぶりにプログラムを書きましたが、php5.0でバージョンアップしたmysqliクラスはデータベースを操作する上でメリットが多いので、情報を確認した上でmysqliメソッドを使ってデータベースを操作してみたいと思います。インターネットとマニュアルの閲覧、閲覧と削除が正常に実行できるのは、挿入関数のみで常にエラーが表示される場合です: Fatal error: Call to a member function prepare() on null in D:xamppshtdocstxladdbook.php on line 20 。
この問題が解決できない場合、Mysqli を諦めるべきでしょうか?私のコードのどこが間違っているのか教えていただけますか?それともサーバーの問題でしょうか? (サーバーには統合環境 Xampps1.9.7 を使用しています)
if($_POST['contacts'] == "true")
{
$stmt = $mysqli->prepare("INSERT INTO contactsuser(bookUname, bookDep , bookDuty,bookphone,bookTel,bookEmail,bookGid) VALUES (?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param('sssd', $bookUname, $bookDep, $ bookDuty、$bookphone、$bookTel、$bookEmail、$bookGid);
$bookUname = $_POST['bookDep']
$bookDuty = $_POST'; ] ;
$bookphone = $_POST['bookphone'];
$bookEmail = $_POST['bookGid'];
/* 準備されたステートメントを実行します */
$stmt->execute();
printf("%d Row Inserted.n", $stmt->affected_rows);
/* ステートメントと接続を閉じます */ $stmt ->close();
exit
}
ディスカッションへの返信 (解決策)
$mysqli は mysqli オブジェクトではありません$stmt = mysqli_prepare($link, "INSERT INTO contactsuser(bookUname, bookDep, bookDuty,bookphone,bookTel,bookEmail,bookGid) VALUES (?, ?, ?, ?, ?, ?, ?)")
たった今の私のプログラムうっかりデータベース リンク ファイルを含めるのを忘れたのは事実ですが、プロセス指向スタイルへの変更を含め、データベース リンク ファイルを含めた後も、依然としてエラーが発生します。
警告: mysqli_stmt_bind_param(): 型定義文字列内の要素の数が一致しません。 D のバインド変数の数を照合します: xamppshtdocstxladdbook.php の 24 行目
$link = mysqli_connect('localhost','root','root','addressbook') または die('Unale to connect');
$stmt = mysqli_prepare($ link, "INSERT INTO contactsuser(bookUname, bookDep, bookDuty,bookphone,bookTel,bookEmail,bookGid) VALUES (?, ?, ?, ?, ?, ?, ?)") ;
mysqli_stmt_bind_param($stmt, 'sssd', $bookUname, $bookDep, $bookDuty, $bookphone, $bookTel, $bookEmail, $bookGid);
$bookUname = $_POST['bookDep']; _POST['bookDep'];
$bookDuty = $_POST['bookphone'];
$bookTel = $_POST['bookTel']; 'bookEmail'];
$bookGid = 1;
mysqli_stmt_close($stmt);
主キー bookid が int 型であることを除き、増加、bookGid は int 型、その他はすべて varchar 型です
VALUES (? , ?, ?, ?, ?, ?, ?)
$stmt,'sssd', $bookUname, $bookDep, $bookDuty, $bookphone、$bookTel、$bookEmail、$bookGid
7 つの疑問符は 8 つのパラメータに対応します。 。 。 。 。疑問符を追加して再試行してください
mysqli_stmt_bind_param($stmt,'ssssssd', $bookUname, $bookDep, $bookDuty, $bookphone, $bookTel, $bookEmail, $bookGid);
http://php.net/manual/zh/mysqli-stmt.bind-param.php
変数の数と文字列型の長さは、次のパラメータと一致する必要があります上の人は正しいです、それはssssssdであるはずです
素晴らしい!ご協力いただきました専門家の皆様に感謝いたします。特にsaint_leerとmisakaqunianx...彼らが言及した「ssssssd」の問題は的を射ていますが、文字列を渡すことが何を意味するのか私はまだ理解していません。