-1

タイトルが示すように、古い MySQL_statements から PDO に切り替えています。問題がありますが、'tableitem'既に存在するかどうかを確認しようとすると、存在する場合は取得し'tableitem2''tableitem'存在しない場合は 1 に設定'tableitem2'します。これが私の古い MySQL コードであり、以下に何を述べますか私が試してみました。

$user_ip = $_SERVER['REMOTE_ADDR'];
$query = "SELECT * FROM TABLENAME WHERE user_ip='$user_ip' ";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_row($result);
if (mysql_num_rows($result) )
{
  $_SESSION['stage'] = $row[1];
}
else
{
   $_SESSION['stage'] = 1;
    $strSQL2 = "INSERT INTO TABLENAME (user_ip, stage) VALUES ('$user_ip','$stage')";
     $result = mysql_query($query) or die(mysql_error());
}

上記は機能しましたが、今は PDO ステートメントに切り替えたいと考えています。ここで私が PDO ステートメントで試したことがある場合:

$user_ip = $_SERVER['REMOTE_ADDR'];

$sql = "SELECT COUNT(`stage`) FROM `TABLENAME` WHERE `user_ip` = ?";
$result = $pdo->prepare($sql); 
$result->execute(array($user_ip)); 
$number_of_rows = $result->fetchColumn();

    /* Check the number of rows that match the SELECT statement */
  if ($result->fetchColumn() > 0) {
        $_SESSION['stage'] = $row[1];
         }
  else {
      $_SESSION['stage'] = 1;
    $result = $pdo->prepare("INSERT INTO `BPGUV` (`user_ip`, `stage`) VALUES (:user_ip, :stage)";
    $result->execute(
        array(
        ':user_ip' => $user_ip,
        ':stage' => 1
        )
    );
}

PDOを使用してデータベースに接続し、PDOを使用してMySQLコマンドを使用できますが、上記のコードをPDOステートメントに正しく転送できないようです。

4

1 に答える 1

1
$user_ip = $_SERVER['REMOTE_ADDR'];
$sql = "SELECT COUNT(`stage`) FROM `TABLENAME` WHERE `user_ip` = ?";
$result = $con->prepare($sql);
$result->execute(array($user_ip)); 
$number_of_rows = $result->fetchColumn();
  /* Check the number of rows that match the SELECT statement */
  if ($number_of_rows > 0) {
        $_SESSION['stage'] = $number_of_rows;
 }
  else {
    $_SESSION['stage'] = 1;
    $result = $pdo->prepare("INSERT INTO `TABLENAME` (`user_ip`, `stage`) VALUES (:user_ip, :stage)");
    $result->execute(
        array(
        ':user_ip' => $user_ip,
        ':stage' => 1
        )
    );
}

最初のクエリでは、$user_ip後でバインドしたりパラメーターとして渡したりするのではなく、クエリ内で直接渡しています。現在、クエリは次のように取られていました。

SELECT COUNT(`stage`) 
FROM `TABLENAME` 
WHERE `user_ip` = 8.8.8.8

ご存知のように、これは間違った構文です。

于 2013-10-06T08:45:12.987 に答える