0

特定の日付以降にユーザーがシステムにログインしたかどうかを評価する必要があります。これを行うために、MySQLデータベースには、users、survey、loginsの3つのテーブルがあります。調査では、ユーザーが最後にログインしたときと比較して、必要な時点の日付が保持されます。質問は次のとおりです。

「?」を使ったとき プレースホルダーの場合、結果のnum_rowsカウントは常に0でした。ただし、クエリステートメントを$ mysqli-> prepare()に渡す前に値を割り当てると、プロセスは期待どおりに機能します。どういうわけか、store_result()は列を取得していませんでした。これが私のコードです:

 if (isset($userId)){
//get survey release date
$res3 = $mysqli->query("SELECT sur_date,sur_url FROM survey ORDER BY sur_id DESC limit 1");
$array = $res3->fetch_assoc();
$theta_date = $array['sur_date'];
//$theta_date = "2013-01-18 01:00:00";

   //this didn't generate errors, but didn't output the correct result either.
   //$query = "SELECT login_id FROM logins WHERE login_user=? AND login_date>=?";
   //if ($stmt = $mysqli->prepare($query)){
   // $stmt->bind_param('ss',$userID,$theda_date);
   // $stmt->execute();

  //this works
  $query = "SELECT login_id FROM logins WHERE login_user='$userId' AND login_date>='$theta_date'";
    if ($stmt = $mysqli->prepare($query)){
    $stmt->execute() or die("The query did not work");

    //if number is greater than 0 do something
    $stmt->store_result();
      printf("The number of login ids after theta are %d",$stmt->num_rows);
  $stmt->close();
}else{
   echo "The query did not execute.";
}
 }else{
   echo "The User ID was not valid.";
   exit();
 }
 $mysqli->close();

どんな洞察も役に立ちます、

4

1 に答える 1

0

準備されたステートメントは、$theta_date 日時形式に問題があるようです。$theta_date は調査テーブルに「2013-01-18 01:00:00」として保存されます。bind_param() は $theta_date を参照として解析しようとしていました。解決策は次のとおりです。

 //convert datetime to Unix timestamp with strtotime()
 $theta_date = $array['sur_date'];
 $timestamp = strtotime($theta_date);

 //In the prepared statement, use MySQL FROM_UNIXTIME function to convert timestamp
 $query = "SELECT login_id FROM logins WHERE login_user=? AND login_date>=FROM_UNIXTIME(?)";

 //changed the parameter types to integer and bound $timestamp to second placeholder
 if ($stmt = $mysqli->prepare($query)){
   $stmt->bind_param('ii',$userId,$timestamp);
   $stmt->execute();

//the rest is the same
 $stmt->store_result();
   printf("The number of login ids after theta are %d",$stmt->num_rows);
   $stmt->close();
}

それは苦痛でした。

于 2013-01-20T00:35:18.490 に答える