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



## ByeBye 242513 (15. Mai 2018)

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

Fehlermeldung:

```
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:

```
<?
  $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();
   
  }
?>
```


----------



## Yaslaw (16. Mai 2018)

Meines Wissens kannst du keinen Feldnamen und Tabellennamen als Paramter mitgeben. Nur Werte.
Also Paramter 1, 2 und 4 machen Probleme.


```
$query = 'UPDATE wp_test SET lastname = ? WHERE lastname = ?';
      $stmt  = $mysqli -> prepare($query);
      $stmt -> bind_param('ss', $set['replace'], $set['search']);
```


----------



## ByeBye 242513 (16. Mai 2018)

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.


----------



## Yaslaw (16. Mai 2018)

Nicht für Feldnamen und Tabellennamen. Aber diese kommen ja nicht von Aussen (Useraingabe). Ergo kannst du es etwa so lösen

```
$query = "UPDATE {$set['table']} SET {$cn} = ? WHERE {$cn} = ?";
      $stmt  = $mysqli -> prepare($query);           
      $stmt -> bind_param('ss', $set['replace'], $set['search']);
```


----------

