[MySQLi] Fatal error: Uncaught Error: Call to a member function bind_param() on boolean

B

ByeBye 242513

Hallo Community,
ich seh den Wald vor lauter Bäumen nicht, wo liegt der Fehler?

Fehlermeldung:
Code:
Fatal error: Uncaught Error: Call to a member function bind_param() on boolean in /var/www/xxx/test.php:62 Stack trace: #0 {main} thrown in /var/www/xxx/test.php on line 62

PHP- und MySQLi-Code:
PHP:
<?
  $db = array();
  $set = array();
 
  $db['host'] = 'localhost';
  $db['user'] = 'XXXXXX';
  $db['password'] = 'XXXXXX';
  $db['name'] = 'XXXXXX';
 
  $set['search'] = 'TEST';
  $set['replace'] = '0';
  $set['table'] = 'wp_test';
  $set['column'] = array("lastname");

  $mysqli = new mysqli($db['host'], $db['user'], $db['password'], $db['name']);

  if ($mysqli->connect_errno) {
                  
  } else {
   
    foreach ($set['column'] as &$cn) {

      $query = 'UPDATE ? SET ? = ? WHERE ? = ?';
      $stmt  = $mysqli -> prepare($query);            
      $stmt -> bind_param('sssss', $set['table'], $cn, $set['replace'], $cn, $set['search']);
      $stmt -> execute();

    }

    unset($cn);
    $stmt->close();
   
  }
?>
 
Meines Wissens kannst du keinen Feldnamen und Tabellennamen als Paramter mitgeben. Nur Werte.
Also Paramter 1, 2 und 4 machen Probleme.

PHP:
      $query = 'UPDATE wp_test SET lastname = ? WHERE lastname = ?';
      $stmt  = $mysqli -> prepare($query);
      $stmt -> bind_param('ss', $set['replace'], $set['search']);
 
Habe ich eine andere Möglichkeit außer die Variablen direkt in den Query zu schreiben?
Mir wäre eine Prepare Statement Lösung lieber, dann kann ich auf die escape-Funktion verzichten.
 
Nicht für Feldnamen und Tabellennamen. Aber diese kommen ja nicht von Aussen (Useraingabe). Ergo kannst du es etwa so lösen
PHP:
      $query = "UPDATE {$set['table']} SET {$cn} = ? WHERE {$cn} = ?";
      $stmt  = $mysqli -> prepare($query);           
      $stmt -> bind_param('ss', $set['replace'], $set['search']);
 
Zurück