无法将使用PHP5.4的mysql查询转换为PHP7

djp7away  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(370)

这个问题在这里已经有答案了

如何将mysql改为mysqli(11个答案)
两年前关门了。
我正在使用这个教程,在我不得不将php更新到版本7之前,php5.4的一切都非常好。从现在开始这个查询

$query = sprintf("SELECT id, name, address, lat, lng, ( 3959 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20",
  mysql_real_escape_string($center_lat),
  mysql_real_escape_string($center_lng),
  mysql_real_escape_string($center_lat),
  mysql_real_escape_string($radius));

不起作用(我知道php7不支持mysql\u查询,我需要使用mysqli insted,但我尝试了几个选项,它仍然不适合我)。有人知道怎么做吗?

gc0ot86w

gc0ot86w1#

正如您所说,无论如何,使用phpsmysql函数都是不赞成的。
从mysqli开始有一个很好的观点:
http://php.net/manual/de/book.mysqli.php
例如,您提供的代码可以这样翻译:

<?php

    $mysqli = new mysqli("localhost", "user", "password", "database");
    if ($mysqli->connect_errno) {
        exit("Failed to connect to MySQL: (".$mysqli->connect_errno.") ".$mysqli->connect_error);
    }

    $center_lat = $mysqli->real_escape_string($center_lat);
    $center_lng = $mysqli->real_escape_string($center_lng);
    $radius = $mysqli->real_escape_string($radius);

    $res = $mysqli->query("SELECT id, name, address, lat, lng, ( 3959 * acos( cos( radians('".$center_lat."') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('".$center_lng."') ) + sin( radians('".$center_lat."') ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < '".$radius."' ORDER BY distance LIMIT 0 , 20");

    while ($row = $res->fetch_assoc()) {
        print_r($row);
    }

?>

相关问题