ホームページ > バックエンド開発 > PHPチュートリアル > Mysqli の準備エラーの問題について専門家のアドバイスを提供してください

Mysqli の準備エラーの問題について専門家のアドバイスを提供してください

WBOY
リリース: 2016-06-23 13:26:42
オリジナル
1275 人が閲覧しました

久しぶりにプログラムを書きましたが、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」の問題は的を射ていますが、文字列を渡すことが何を意味するのか私はまだ理解していません。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート