[英]mysqli vs msql and PDO connection
我正在尝试按照此处的教程制作基本的 cms: Cms Tut
在 Article.php 中,他使用 mysql_escape_string($order) 和 PDO 连接,现在已从 php 7 中删除,我改为 mysqli_escape_string($order) 并以某种方式进行,但给出了 2 个参数的错误。 我是 php 新手,但在我搜索时,我认为问题出在 PDO 连接上,我不能将连接作为第二个参数。 有什么想法和想法吗? 提前致谢。
这是代码:
public static function getList( $numRows=1000000, $order="publicationDate DESC" ) {
$conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$sql = "SELECT SQL_CALC_FOUND_ROWS *, UNIX_TIMESTAMP(publicationDate) AS publicationDate FROM articles
ORDER BY " . mysqli_escape_string($order) . " LIMIT :numRows";
$st = $conn->prepare( $sql );
$st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
$st->execute();
$list = array();
while ( $row = $st->fetch() ) {
$article = new Article( $row );
$list[] = $article;
}
// Now get the total number of articles that matched the criteria
$sql = "SELECT FOUND_ROWS() AS totalRows";
$totalRows = $conn->query( $sql )->fetch();
$conn = null;
return ( array ( "results" => $list, "totalRows" => $totalRows[0] ) );
}
更新代码后,通过创建一个mysqli连接,在浏览器中有这个错误:mysqli_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: No such host is known。
在服务器错误日志中还有这个:调用成员函数 real_escape_string() on boolean
更新代码为:
public static function getList( $numRows=1000000, $order="publicationDate DESC" ) {
$conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$link = mysqli_connect(DB_USERNAME, DB_PASSWORD, DB_DSN);
$sql = "SELECT SQL_CALC_FOUND_ROWS *, UNIX_TIMESTAMP(publicationDate) AS publicationDate FROM articles
ORDER BY " . $link->real_escape_string($order) . " LIMIT :numRows";
$st = $conn->prepare( $sql );
$st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
$st->execute();
$list = array();
while ( $row = $st->fetch() ) {
$article = new Article( $row );
$list[] = $article;
}
// Now get the total number of articles that matched the criteria
$sql = "SELECT FOUND_ROWS() AS totalRows";
$totalRows = $conn->query( $sql )->fetch();
$conn = null;
return ( array ( "results" => $list, "totalRows" => $totalRows[0] ) );
}
你需要选择一个mysql_
, mysqli_
和PDO
(不挑mysql_
)。
你不能混合PDO
和mysqli_
。
您不需要使用mysqli_escape_string
来保护 PDO 免受 SQL 注入; 它有自己的方法(您已经将其用于nubRows
!!)。
请参阅如何防止 PHP 中的 SQL 注入? 有关使用 PDO 处理特殊字符的指南。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.