【问题标题】:Switching over from mysql to PDO [closed]从mysql切换到PDO [关闭]
【发布时间】:2013-10-06 08:39:53
【问题描述】:

正如标题所述,我正在从旧的 MySQL_statements 切换到 PDO。但是当我尝试查看'tableitem' 是否已经存在时,我遇到了问题,如果确实存在,我想获取'tableitem2',如果'tableitem' 不存在,我想将'tableitem2' 设置为1。这是我的旧 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 语句。

【问题讨论】:

  • 你的问题是什么?

标签: php mysql sql database pdo


【解决方案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

如您所知,这是错误的语法。

【讨论】:

  • 感谢您的快速回复,我编辑了帖子并尝试使用您的代码,但它似乎对我不起作用
  • @user2582299 哎呀!一开始我没有注意到。在 if 语句中应该是 $number_of_rows 而不是 $result->fetchColumn()。现已修复。
  • 我还缺少一个')' $result = $pdo->prepare("INSERT INTO TABLENAME (user_ip, stage)"; 应该是舞台')");
  • 如何从桌子上获得“舞台”?就像我在哪里: $_SESSION['stage'] = $number_of_rows;示例:$_SESSION['stage'] = $results['stage'];
  • @user2582299 将SELECT COUNT(stage) 更改为SELECT stage,然后您必须遍历结果集。
猜你喜欢
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 2013-11-06
相关资源
最近更新 更多