2017-08-16 8 views
0

私は$linesという文字列の配列を持っており、各文字列でデータベースを検索したいと思います。私が動作する必要があり何MySQLi Preparedステートメントとフィールドの取得

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>"; 
    } 

をしかし、私はこれを望んでいません。プリペアドステートメントを使い、上記のような列名を使用できるようにしたい。私が試した:(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); 

答えて

1

プリペアドステートメントを使用すると、引用符の必要性を迂回し、正確な変数で通過すると、あなたがいないクエリで、あなたの変数の中でワイルドカードを渡す必要があります。

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

ありがとうございました。しかし、私のechoステートメントはまだ印刷されていません – almino

+0

あなたは全く行を取得していないのですか?それがそれらの列の場合は、 'var_dump($ row);'を実行して、その配列に正確に何が含まれているか調べます。 – aynber

関連する問題