Php 准备stmt、计数行、提取数组

Php 准备stmt、计数行、提取数组,php,arrays,mysqli,prepared-statement,fetch,Php,Arrays,Mysqli,Prepared Statement,Fetch,我需要一个简短的脚本来帮助我创建用户ID。我正在使用今天的日期创建唯一的ID。我对数据库运行一个查询,检查是否有包含今天日期的ID //use today's date for ID $idDate = date(Ymd); $param = "{$idDate}%"; //retrieve all rows with today's date in ID $find = $mysqli->prepare("SELECT * FROM users WHERE useri

我需要一个简短的脚本来帮助我创建用户ID。我正在使用今天的日期创建唯一的ID。我对数据库运行一个查询,检查是否有包含今天日期的ID

//use today's date for ID
  $idDate = date(Ymd);

  $param = "{$idDate}%";

  //retrieve all rows with today's date in ID
  $find = $mysqli->prepare("SELECT * FROM users WHERE userid LIKE ? ");
  $find->bind_param("s", $param);
  $findresult = $find->execute();
    if(!$findresult){
     die('Invalid query : ' . mysqli_error($mysqli));
      }

  $find->store_result();
如果没有具有今天日期的唯一ID,那么我将插入今天的日期作为当天的第一个ID。如果有包含今天日期的ID,我将该ID增加1,并将该ID插入数据库

这很简单。我遇到的唯一问题是获取包含今天日期的行数组

//use today's date for ID
  $idDate = date(Ymd);

  $param = "{$idDate}%";

  //retrieve all rows with today's date in ID
  $find = $mysqli->prepare("SELECT * FROM users WHERE userid LIKE ? ");
  $find->bind_param("s", $param);
  $findresult = $find->execute();
    if(!$findresult){
     die('Invalid query : ' . mysqli_error($mysqli));
      }

  $find->store_result();
查询正在检索某些内容,因为
num_rows
至少计算了1行,而mysqli_error没有为该特定查询提供任何错误

  //count the rows
  $idcount = $find->num_rows();

  //if no rows contain today's date in IDs
  if($idcount == 0){
    $userid = $idDate . '00';
    }
    else{
这给了我一个错误:mysqli_fetch_array()期望参数1是给定对象的mysqli_结果

      //store today's IDs in array
      while($found = mysqli_fetch_array($find)){
        $todaysids[] = array($found['userid']);
        }


        //find highest value 
        $hival = max($todaysids);
        //add 1 to highest value
        $userid = $hival++;
        }

如何检索查询结果和获取数组?

您的代码中混合了OO和过程样式。您可以使用
get_result
并坚持OO风格:

$findresult = $find->execute();
$result = $find->get_result();
while ($found = $result->fetch_array(MYSQLI_ASSOC))
...

您可以像这样使用查询中的计数行

   $find = $mysqli->prepare("SELECT col1,col2,col3,col4 , count(*) as counts FROM users WHERE userid LIKE ? ");
                                                          ^^^^^^^^^^^^^^^^^--// for counting rows
   $find->bind_param("s", $param);
   $find->execute();
   $find->store_result();
   $find->bind_result( $col1 , $col2,$col3,$col4,$counts);  // bind your variables here
   $find->fetch() ;

   echo $counts ; // will give you number rows here.
   echo $col1 ;
编辑:


它不是已经存在了吗?我认为您需要像$new_array[]=$found['userid']这样的东西;一方面注意:如果mysql驱动程序不是
mysqlnd
,则此函数可能不可用。应该使用另一种方式,即
$find->bind_result($col1等)
。还有一个输入错误,应该是
$find->get_result()
btw。如果我使用
get_result()
,我应该不使用
store_result()
?现在如何调用
store_result()
num_rows()
?PHP告诉我,调用这两个函数时,$find现在是一个意外变量。当您使用
bind_result()
时,值是否作为数组返回?@JosanIracheta这取决于您如何获取它们。如果有一个值数组,则可以在while循环中使用。看我的edit如何从准备好的语句绑定计数<代码>警告:绑定变量的数量与准备语句中的字段数量不匹配您必须在查询中选择相同列和别名的相同数量的绑定变量,我将编辑我的答案。