0

テーブルにいくつかのフィールドを追加したいのですが、次のエラーが発生します。

Fatal error: Call to a member function bind_param() on a non-object in C:\wamp\www\GuildSite\Include\Database.php on line 69

これはテーブルに挿入しなければならない関数です: foreach ループの前に $stmt === false を移動しました

public function myinsert($sqlInsert,$param)
{
$stmt = $this->_connection->prepare($sqlInsert) ;
if ($stmt === FALSE) 
{
  die($this->_connection->error);
}
echo 'Parameters number: ' . sizeof($param) ;
foreach ( $param as $key => $field )
{
  $stmt->bind_param ( $key , $field ) ;
}

$result = $stmt->execute() ;
$stmt->close();
return $result ;
}

フォームのあるページから、これらのパラメーターがあり、これが関数を呼び出す方法です。

$param[':name'] =$_POST["personaName"];
$param[':email'] = $_POST["email"];
$param[':pass'] = $_POST['password'] ;
$sqlInsert = "INSERT INTO `new_member`(`persona_name`, `email`, `password`) "
      . "VALUES (':name', ':email', ':pass');";
$db->myinsert($sqlInsert , $param) ;

値の前後の $sqlInsert no ' に小さなエラーがありました。これはソートされています

私は何を間違っていますか?

テーブルに新しい行を挿入した後、phpMyadmin から SQL 挿入をコピーしました。

私は実行を実行しようとしました

$result = $stmt->execute($param) ;

ただし、テーブルにフィールドは挿入されません。

これは私のデータベース接続です

public function __construct()
{
  try
  {
    $this->_connection = new mysqli(DB_SERVER,DB_USER,DB_PASS,DB_NAME) ;
  } 
  catch (Exception $e) 
  { 
    echo $e->errorMessage(); 
  }
}

配列のサイズを確認したところ、サイズは 3 でした

4

1 に答える 1

0

bind_param()に間違った引数を使用しているようです。パラメータの型を示す文字列を最初の引数として指定する必要があります。bind_param()そのため、実行時に必要に応じて、次のようにデータ型のイニシャルを取得できます。

$types = '';
foreach ( $param as $key => $field )
{
  $types .= gettype($field)[0];
}

への最初の引数として使用できるようになりましたbind_param()。また、ドキュメントだけを見ると、関数は名前付きパラメーターを許可していないようで、インデックス付きパラメーターのみを許可しているようです。bind_param()したがって、クエリを実行するために使用し続けることは非常に難しいようです。この関数は、ユースケースには適していません。代わりに、名前付きパラメーターをサポートするPDO mysql インターフェイスとPDO::bindValue()を使用できます。

于 2013-11-13T20:50:29.830 に答える