通过MySQLi我会这样做:
$sql = $connect->prepare("INSERT INTO Table (a, b) VALUES (?, ?)");
$sql->bind_param('ss', $a, $b);
$sql->execute();
$sql->close();
现在的问题是,我如何使用mssql为SQL Server而不是MySQL做同样的事情?
我知道我能做到:
$sql = sqlsrv_query($connect, "INSERT INTO Table (a, b) VALUES (?, ?)", array($a, $b));
但是,这需要特定于Windows的SQL驱动程序,我无法在Linux平台上使用(实际上我的网站是托管的)。
我的服务器安装了mssql库,即使它已被弃用,但它仍然适用于PHP 5.6
我在查询参数化方面遇到了麻烦,我所能做的就是:
$sql = "INSERT INTO Table (a, b) VALUES ('$a', '$b')";
mssql_query($sql, $connect);
但当然我不想直接插入值,所以如何在mssql上参数化该查询?
答案 0 :(得分:0)
似乎这不是最简单的事情。无论如何,绝对准备好的陈述将在PDO
中发生来自原始的PHP文档:
如果无法使用SqlSrv,则可以使用PDO_ODBC驱动程序 连接到Microsoft SQL Server和Sybase数据库,作为本机 Windows DB-LIB是古老的,线程不安全,不再受支持 微软。
您可以针对您的案例阅读 UNIX系统上的PDO_ODBC 部分。不要忘记阅读评论,它们可能对您了解应该如何发生有用。
您可以参考this堆栈溢出问题。
这就是你用PDO进行参数化查询的方法:
$sql = 'SELECT name, colour, calories FROM fruit
WHERE calories < :calories AND colour = :colour';
// where $dbh is PDO object
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();
$sth->execute(array(':calories' => 175, ':colour' => 'yellow'));
$yellow = $sth->fetchAll();
请参阅official docs上的其他示例。
祝你好运的朋友,不要忘记分享你的经验。