在pdo查询中使用变量是不好的做法吗?

时间:2016-10-27 22:20:05

标签: php mysql pdo

我有一个像这样的PHP PDO查询:

$update = $pdo->query("UPDATE login_users SET lastactivity = '$lastactivity' WHERE user_id = 1");

我喜欢这样做,因为我认为我的代码看起来更好。

这样做可以吗?或者我应该这样做:

$params = array(
                     ':id'       => $_SESSION['jigowatt']['user_id'],
                     ':lastactivity'       => $lastactivity,
                 );

         $update = $pdo->query('UPDATE login_users SET lastactivity = :lastactivity WHERE user_id = :id', $params);

2 个答案:

答案 0 :(得分:2)

  

我有一个像这样的PHP PDO查询:

绝不你应该有这样的代码。

  

或者我应该这样做

你都不会写这样的准备好的陈述。还有其他方法。例如,没有人强迫您使用命名占位符。你可以使用位置,它们更简洁:

$sql = "UPDATE login_users SET lastactivity = ? WHERE user_id = ?";
$pdo->prepare($sql)->execute([$lastactivity],$_SESSION['jigowatt']['user_id']);

答案 1 :(得分:0)

这是PDO"查询包装器"的示例:

public function sendQuery($queryString, array $queryParams = array())
{
    try {
        $stmt = $this->_PDO->prepare($queryString);
        $stmt->execute($queryParams);
    } catch (\PDOException $e) {
        if ($this->_PDO->inTransaction()) {
            $this->_PDO->rollBack();
        }
        throw $e; // this line for example only (see comments of this answer)
    }

    return $stmt;
}

可以像这样使用:

$conn = \DBI::getConnection(); // DBI return DBC object
$x = $conn->sendQuery(
    'SELECT x FROM tbl WHERE y = :y',
    [':y' => $y]
)->fetch(\PDO::FETCH_COLUMN);