php 在准备好的语句中执行SELECT查询时遇到问题

tcomlyy6  于 2023-09-29  发布在  PHP
关注(0)|答案(3)|浏览(107)

我已经遵循了一堆关于在准备好的语句中使用SELECT的不同示例,但没有返回任何内容。* 编辑 * 我已经改变了我的代码看起来像这样:

$date1 = 2012-01-01;
$date2 = 2012-01-31;
$sql_con = new mysqli('db', 'username', 'password', 'database');

if($stmt = $sql_con->prepare("SELECT eventLogID FROM Country WHERE countryCode=? AND date BETWEEN ? AND ?")){

   $stmt->bind_param("sss", $country_code, $date1,$date2); 

    $stmt->execute();

  $i=0;
  while ($stmt->fetch()){
  $stmt->bind_result($row[$i]);
  $i++;
  }

  $stmt->close();
$sql_con->close();

现在,除了第一个条目之外,所有需要的条目都被添加到$row[]中。为什么不添加第一个条目?提前感谢!

ifmq2ha2

ifmq2ha21#

使用get_result(而不是bind_result)

// parameters
$date1 = '2012-01-01';
$date2 = '2012-01-31';
$country_code = 'whatever';

// Connect to DB
$db = new mysqli('db', 'username', 'password', 'database');

// The query we want to execute
$sql = "SELECT eventLogID FROM Country WHERE countryCode = ? AND date BETWEEN ? AND ?";

$stmt = $db->prepare($sql);
$stmt->bind_param("sss", $country_code, $date1, $date2); 
$stmt->execute(); 
$result = $stmt->bind_result();

// get results into array
$logIds = $result->fetch_all(MYSQLI_ASSOC);
  
// Do something with the results
print_r($logIds);
vuv7lop3

vuv7lop32#

除了最简单的一行查询之外,我对mysqli中的“bind_result”一点也不感兴趣。
将整行填充到单个数组项中更好的方法是:

$stmt->execute();
$result = $stmt->get_result();
while ($data = $result->fetch_assoc())
    {
        $retvar[] = $data;
    }
$stmt->close();

while ($data = $result->fetch_row())

如果你不想要/需要字段名。

iyr7buue

iyr7buue3#

我认为您必须像这样绑定到bind_results()中的列

/* prepare statement */
if ($stmt = $mysqli->prepare("SELECT Code, Name FROM Country ORDER BY Name LIMIT 5")) {
$stmt->execute();

/* bind variables to prepared statement */
$stmt->bind_result($col1, $col2);

/* fetch values */
while ($stmt->fetch()) {
    printf("%s %s\n", $col1, $col2);
}

这里$col1和$col2绑定到Country表的Code和Name列
(使用列名代替SELECT中的 *)
进一步参考:http://php.net/manual/en/mysqli-stmt.bind-result.php

相关问题