подготовить stmt, считать строки, извлекать массив

Мне нужна помощь с коротким сценарием, над которым я работаю для создания идентификаторов пользователей. Я создаю уникальные идентификаторы, используя сегодняшнюю дату. Я запускаю запрос к базе данных, чтобы проверить, есть ли какие-либо идентификаторы, которые содержат сегодняшнюю дату.

Если нет уникальных идентификаторов с сегодняшней датой, то я вставляю сегодняшнюю дату в качестве первого идентификатора дня. Если есть идентификаторы, содержащие сегодняшнюю дату, я увеличиваю этот идентификатор на 1 и вставляю этот идентификатор в базу данных.

Это довольно просто. Единственная проблема, с которой я столкнулся, — это выборка массива строк, которые содержат сегодняшнюю дату.

//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_result, объект задан

      //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++;
}

Как я могу получить результат запроса и получить массив?

0

Решение

Вы смешиваете OO и процедурные стили в вашем коде. Ты можешь использовать get_result и придерживаться стиля OO:

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

Другие решения

Вы можете использовать количество строк в своем запросе как таковое.

   $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 ;

редактировать:

    while($row = $find->fetch() ;)
{
echo $counts ; // will give you number rows here.
echo $col1 ;
}
0

По вопросам рекламы [email protected]