2017-05-09 118 views
1

我的查询低于:使用PHP-MYSQL中的`fetch_assoc()`在预处理语句中使用`SELECT *`设置多个`WHERE`子句来设置结果的正确方法是什么?

$query = 'SELECT * FROM `table_name` WHERE `uid` = ? AND `email` = ?'; 
$stmt_select = $conn->prepare($query); 
$stmt_select->bind_param('is', $user_id, $user_email); 
$user_id = $_SESSION['uid']; 
$user_email = $_SESSION['user_email']; 
$result = $stmt_select->execute(); 

我想打印使用fetch_assoc设置的结果,这是因为我不想bind_result()全部23列的名字,我想它使用$row['column_name']打印,是什么实现它的正确方法?

如果你想看到我的代码,我在这里问了另一个问题: How to SELECT * with multiple WHERE using fetch_assoc in prepared statements in PHP-MYSQL?

但它并没有得到正确回答,所以不是纠正我的代码,你能告诉我什么是实现的最佳途径它?

+0

我希望我的答案帮助@ user7984467 – Akintunde007

回答

0

我在mysqli中使用SELECT *也有同样的问题。问题在于bind_result部分。通常你需要添加很多变量。意思是如果您有大约20列,则需要20个变量才能包含在bind_result声明中。

我已经量身定制了解决方案来解决您的问题。

$query = 'SELECT * FROM `table_name` WHERE `uid` = ? AND `email` = ?'; 
    $stmt_select = $conn->prepare($query); 
    $stmt_select->bind_param('is', $user_id, $user_email); 
    $user_id = $_SESSION['uid']; 
    $user_email = $_SESSION['user_email']; 
    $result = $stmt_select->execute(); 
    $stmt_select->store_result();//after this line we can output the number of rows if you need to check that as well 
    $number_of_rows = $stmt_select->num_rows; 
    $meta = $stmt_select ->result_metadata(); 
    $parameters = array(); 
    $results = array(); 
    while ($field = $meta->fetch_field()) { 
     $parameters[] = &$row[$field->name]; 
    } 
    call_user_func_array(array($stmt_select , 'bind_result'), $parameters); 
     while ($stmt_select ->fetch()) { 
      foreach ($row as $key => $val) { 
        $x[$key] = $val; //here we get the key => value (Column => Value) 
         } 
         $results[] = $x; //lets grab everything here 
        } 
print_r($results); 
+0

这个按预期工作!祝你好运与你所有的未来项目! – user7984467

+0

谢谢!你也是@ user7984467。快乐编码 – Akintunde007

相关问题