【问题标题】:PHP PDO - dblib MSSQL - using variable in query not workingPHP PDO - dblib MSSQL - 在查询中使用变量不起作用
【发布时间】:2013-03-15 17:17:05
【问题描述】:

我有一个相当简单的查询,我想通过我的 PDO 连接到远程 MSSQL 服务器来运行它。

SELECT BookingID, DriverID 
FROM dbo.VehicleJobHistory 
WHERE TimeJobRequired > "02/03/2013" AND VehicleID = $vid

当我在没有任何变量的情况下编写查询时,它可以完美运行,但是一旦我尝试向查询中添加变量,我什么也没有返回。我认为它的类型不匹配,但我不能确定。

如果我将 $vid 更改为“451”,我会得到我正在寻找的结果。

$vid = '451';    
$myServer = "X";
$myUser = "X";
$myPass = "X";
$myDB = "X";

try {
  # MS SQL Server and Sybase with PDO_DBLIB

$DBH = new PDO("dblib:host=$myServer;dbname=$myDB", $myUser, $myPass);

# creating the statement
$STH = $DBH->query('SELECT BookingID, DriverID FROM dbo.VehicleJobHistory WHERE TimeJobRequired > "02/03/2013" AND VehicleID = $vid');

# setting the fetch mode
$STH->setFetchMode(PDO::FETCH_OBJ);

# showing the results
while($row = $STH->fetch()) {
    echo $row->BookingID . "/";
    echo $row->DriverID  ;
echo "<br>";

}

}
catch(PDOException $e) {
    echo $e->getMessage();
}

# close the connection
$DBH = null;
echo "connection closed";

任何帮助将不胜感激。

【问题讨论】:

    标签: php sql sql-server pdo


    【解决方案1】:

    这是因为您的查询是在单引号字符串中定义的。变量$vid 没有被插入到单引号字符串中,而是作为文字$vid 传递,由于它没有被引用,因此导致查询语法错误。反转引号,在外面使用双引号。

    $STH = $DBH->query("SELECT BookingID, DriverID FROM dbo.VehicleJobHistory WHERE TimeJobRequired > '02/03/2013' AND VehicleID = $vid");
    

    确实,这应该通过准备好的语句和bindParam() 来完成VehicleID

    $stmt = $DBH->prepare("SELECT BookingID, DriverID FROM dbo.VehicleJobHistory WHERE TimeJobRequired > '02/03/2013' AND VehicleID = :vid");
    if ($stmt) {
      $stmt->bindParam(':vid', $vid);
      $stmt->execute();
    }
    

    开始阅读PDO prepared statements。如果您使用的是 PDO,则应该确保您获得了他们的安全优势。

    【讨论】:

      猜你喜欢
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 2014-12-09
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      相关资源
      最近更新 更多