2014-11-10 1 views
0

사용자 ID를 작성하는 간단한 스크립트에 대한 도움이 필요합니다. 오늘 날짜를 사용하여 고유 한 ID를 만듭니다. 데이터베이스에 쿼리를 실행하여 오늘 날짜가 포함 된 ID가 있는지 확인합니다.stmt 준비, 행 수, 배열 반입

오늘 날짜가있는 고유 ID가없는 경우 오늘 날짜를 첫 번째 ID로 삽입합니다. 오늘 날짜가 포함 된 ID가 있으면 해당 ID를 1 씩 증가시키고 해당 ID를 데이터베이스에 INSERT합니다.

매우 간단합니다. 내가 겪고있는 유일한 문제는 오늘 날짜가 포함 된 행 배열을 가져 오는 것입니다.

//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

밤은 이미 배열? $ new_array [] = $ found [ 'userid']와 같은 것을 필요로한다고 생각합니다; –

답변

1

코드에 OO 및 절차 스타일을 혼합합니다. 당신은 get_result를 사용하고 OO 스타일에 충실 할 수

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

한 쪽 : mysql 드라이버가 mysqlnd가 아닌 경우이 함수를 사용할 수 없습니다. '$ find-> bind_result ($ col1, etc ..)'와 같은 다른 방법을 사용해야합니다. 그리고 typo는'$ find-> get_result()'btw가되어야합니다. – Ghost

+0

'get_result()'를 사용하면'store_result()'를 사용하지 않아야합니까? –

+0

'store_result()'와'num_rows()'를 지금 어떻게 호출해야합니까? PHP는 두 함수를 호출 할 때 $ find가 예기치 않은 변수라는 것을 알려줍니다. –

0

당신은 같은 쿼리 그 자체에 카운트 행을 사용할 수 있습니다.

$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

'bind_result()'를 사용하면 배열로 반환되는 값은 무엇입니까? –

+0

@ JosanIracheta 그것은 당신이 그들을 가져 오는 방법에 달려 있습니다. while 루프에서 사용할 수있는 값 배열이있는 경우 내 편집을보세요 –

+0

준비된 명령문에서 어떻게 카운트를 바인드합니까? '경고 : 바인드 변수의 개수가 준비된 문장의 필드 개수와 일치하지 않습니다. ' –