1

準備されたステートメントを機能させようとしていますが、次のエラーが発生し続けます

<b>Fatal error</b>:  Call to a member function bindParam() on a non-object on line <b>41</b><br />

正確に多くのチュートリアルをコピーしましたが、提供されたコードでさえ機能せず、同じエラーが発生しました。

私のコードは以下の通りです:

$mysqli = new mysqli(connect, username,pass, datatbase);
$name = 'Tester';
if (mysqli_connect_errno()) {
    echo "Can't connect to MySQL Server. Errorcode: %s\n", mysqli_connect_error();
   }
      $stmt = $mysqli->prepare("INSERT INTO Parks VALUES (null,?,?,?,?,?,?,?,?,?,?,?,?,?,Now(),?,?,?, 0, 0, 0)");
  if ($stmt === FALSE) {
      die ("Mysql Error: " . $mysqli->error);
}
    $stmt->bind_param('ssssssssssssssss', $name, $theme, $size, $mountains, $hills, $river, $lake, $island, $setofislands, $ocean, $waterfalls, $file, $image, $description, $author,$cs);

$stmt->execute();
$stmt->close();
$mysqli->close();

エラーの原因は BindParam 行です。

前もって感謝します :)

編集: エラーは解決されましたが、データベースにデータが挿入されていません。編集:更新されたクエリ、データベースには LONGTEXT である説明を除いて VARCHAR が含まれています。最後の 3 つは ints/doubles で、現在の日付フィールドがあります。

4

1 に答える 1

2

bindParamPDO関数です。mysqli を使用しているので、bind_param代わりに試してください。「名前」がある場所は型定義でもある必要があるため、文字列には「s」が必要です。

例えば:

$stmt->bind_param('s', $name);

編集:そうは言っても、エラーは関数が間違っているとは言いません。オブジェクトが存在しないと表示されます...これを実行すると、準備が失敗した理由に関する情報が得られる可能性があります。

$stmt = $mysqli->prepare("INSERT INTO 'Parks' VALUES(null, ?");

if ($stmt === FALSE) {
    die ("Mysql Error: " . $mysqli->error);
}

SQLが正しくないため、準備が失敗している可能性が最も高いです(私の推測では、テーブル名「Parks」はクォートに含まれるべきではありません)

編集2:まだ機能していないという私の推測は次のとおりです。

$stmt->bindParam('name', $name);

「名前」がある場所は、整数、倍精度、文字列などのように、実際には変数の型である必要があります。これは、データベースが変数が何であるかを知るためです。

その行を次のように置き換えてみてください。

$stmt->bindParam('s', $name);

于 2013-04-22T11:34:11.480 に答える