stmt bind_result() 不会绑定所有列


stmt bind_result() doesn't bind all columns

我有一个简单的查询,我正在尝试将其绑定到获取循环中的三个变量。不幸的是,它选取了前两列,并将第三列保留为空字符串......我不知所措...有什么想法吗?

 $db = new mysqli("host.com", "username", "password", "db_name");
 $q = "SELECT user_id, meta_key, meta_value FROM wp_usermeta WHERE (meta_key='first_name' OR meta_key='last_name') AND meta_value != '';";
 $stmt = $db->prepare($q);
 $stmt->execute();
 $stmt->bind_result($col1,$col2,$col3);
 while ( $stmt->fetch() ) {
      echo $col1." - ".$col2." - ".$col3."<br />";
      }

输出:

 2 - first_name - 
 2 - last_name - 
 5 - last_name - 
 5 - first_name - 
 6 - first_name - 
 6 - last_name - 
 8 - last_name - 
 8 - first_name - 
 9 - first_name - 
 9 - last_name - 

终于想通了。meta_value字段是长文本数据类型。显然,如果您在使用store_result之前尝试绑定长文本字段,PHP 会返回一个空字符串,而不会给出任何类型的错误或警告。

这是工作代码:

 $db = new mysqli("host.com", "username", "password", "db_name");
 $q = "SELECT user_id, meta_key, meta_value FROM wp_usermeta WHERE (meta_key='first_name' OR meta_key='last_name') AND meta_value != '';";
 $stmt = $db->prepare($q);
 $stmt->execute();
 $stmt->store_result();
 $stmt->bind_result($col1,$col2,$col3);
 while ( $stmt->fetch() ) {
      echo $col1." - ".$col2." - ".$col3."<br />";
      }