Мне нужна помощь с коротким сценарием, над которым я работаю, для создания идентификаторов пользователей. Я создаю уникальные идентификаторы, используя сегодняшнюю дату. Я запускаю запрос в базу данных, чтобы проверить, есть ли какие-либо идентификаторы, содержащие сегодняшнюю дату.
Если нет уникальных идентификаторов с сегодняшней датой, я вставляю сегодня дату как первый идентификатор дня. Если есть идентификаторы, содержащие сегодняшнюю дату, я увеличиваю этот идентификатор на 1 и INSERT, чтобы ID в базу данных.
Это довольно просто. Единственная проблема, с которой я столкнулся, - это выборка массива строк, содержащих сегодняшнюю дату.
//use today date for ID
$idDate = date(Ymd);
$param = "{$idDate}%";
//retrieve all rows with today 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
что-то, потому что num_rows
подсчитывает как минимум 1 строку, а mysqli_error не дает мне никаких ошибок для этого конкретного запроса.
//count the rows
$idcount = $find->num_rows();
//if no rows contain today date in IDs
if($idcount == 0){
$userid = $idDate . '00';
}
else{
Это дает мне ошибку: mysqli_fetch_array() ожидает, что параметр 1 будет mysqli_result, данный объект
//store today 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))
...
Вы можете использовать строки count в своем запросе так, как это.
$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 ;
}
bind_result()
, значения возвращаются как массивы?
mysqlnd
. следует использовать другой способ -$find->bind_result($col1, etc..)
. и опечатка, должно быть$find->get_result()
кстати.store_result()
если я используюget_result()
?