2017-08-16 1 views
0

J'ai un tableau de chaînes appelé $lines et je veux rechercher une base de données avec chaque chaîne.MySQLi Instructions préparées et extraction de champs

Ce que je qui fonctionne:

foreach($lines as $line) { 
    $line = real_escape_string($line); 
    $sql = "select * from $table where $column like '%$line%'" 
    $result = $conn->query($sql); 
    if($result->num_rows) { 
     while ($row = $result->fetch_assoc()) 
      //Name and Date are are only 2 out of 15+ column names from the db table 
      echo "<tr><td> {$row['Name']} </td> 
        <td>  {$row['Date']} </td></tr>"; 
    } 

Cependant, je ne veux pas. Je veux utiliser des instructions préparées et être capable d'utiliser des noms de colonnes comme ci-dessus. Ce que j'ai essayé: (de here)

$vars = array(); 
$data = array(); 
$stmt = $conn->prepare("SELECT * FROM $table WHERE `$column` LIKE '%?%'"); 
$stmt->bind_param("s", $line); 
$stmt->execute(); 
$result = $stmt->store_result(); 
$meta = $result->result_metadata(); 

echo "WORKS"; //doesn't print 
while ($field = $meta->fetch_field()) 
    $vars[] = &$data[$field->name]; 
call_user_func_array(array($result, 'bind_result'), $vars); 
$i = 0; 
while ($result->fetch()) { 
    $array[$i] = array(); 
     foreach ($data as $k=>$v) 
      $array[$i][$k] = $v; 
     $i++; 
} 
print_r($array); 

Répondre

1

En utilisant les commandes préparées contournements la nécessité de citations et passe dans la variable exacte, vous devez passer les caractères génériques dans votre variable non dans la requête:

$stmt = $conn->prepare("SELECT * FROM $table WHERE `$column` LIKE ?"); 
$stmt->bind_param("s", '%'.$line.'%'); 
+0

Ok merci. Cependant, mon instruction echo n'est toujours pas imprimée. – almino

+0

N'obtenez-vous aucune ligne, ou seulement ces colonnes? Si c'est juste ces colonnes, essayez 'var_dump ($ row);' pour savoir ce qu'il y a exactement dans ce tableau. – aynber