【问题标题】:Trying to find an easy way for PHP and Mysql DB to do math (AVG MIN MAX) for PHP5.5试图找到一种简单的方法让 PHP 和 Mysql DB 为 PHP5.5 做数学 (AVG MIN MAX)
【发布时间】:2016-04-06 23:49:40
【问题描述】:

我目前有 PHP 5.3,需要至少升级到 PHP 5.5/5.6。我有一个页面发布出租物业的平均值。有一段时间我不使用mysql,但是当我升级时,需要使用mysqli。下面是我尝试在 PDO 中编写的代码。

$hostname = "your_hostname";  
$username = "your_username";  
$password = "your_password";
$db = "database";

$dbh = new PDO("mysql:host=$server;dbname=$db", $user, $pass);  

foreach ($dbh->query("SELECT MAX(rent) FROM table WHERE PType ='$PType' AND PState = '$state'") as $row) { 
    $SMR = "" . $row['MAX(rent)'] . "";
}

这适用于 PHP 5.3,但不适用于 PHP 5.5/5.6。我尝试将$dbh 行更改为:

$dbh = new PDO("mysqli:host=$server;dbname=$db", $user, $pass); 

错误日志出现驱动程序错误。

有没有更好的方法?

【问题讨论】:

  • 您可以从日志中发布驱动程序错误吗?另外,我看不到您在哪里设置了 $server 变量。看起来您在 $hostname$server 之间不匹配。还有你的其他变量。这是您使用的实际代码吗?
  • 您不需要在PDO 初始化中将mysql 更改为mysqliPDO 已经在后台使用了现代客户端库,而这个 mysql 与您不应再使用的 mysql_*() 函数无关。你绝对可以继续使用new PDO('mysql:...')。当您尝试使用以前使用的相同代码时,您遇到了哪些错误?

标签: php mysql mysqli pdo


【解决方案1】:

就升级所需的内容而言,这里似乎有些混乱。 mysql_query() 函数和相关的 mysql_*() 函数从 PHP 5.5 开始被弃用,并在 PHP7 中被删除。

不过,这与PDO的初始化中的mysql这个词无关。 here in PDO's documentation 显示的语法是正确的。旧版mysql_*() 函数的使用应替换为 MySQLi,但 PDO 不受影响。

现在,我不确定您是否真的尝试过旧的 PDO 代码但它失败了,或者您是否只是认为需要进行更改以获得最佳实践。但是,如果 $row['MAX(rent)'] 不适合您,即使是,为了清楚起见,您可能只想为其分配一个别名:

foreach ($dbh->query("SELECT MAX(rent) as MaxRent FROM table WHERE PType ='$PType' AND PState = '$state'") as $row) { 
    $SMR = "" . $row['MaxRent'] . "";
}

【讨论】:

  • 使用该别名有效。我不得不添加try..catch。驱动问题解决了!你们摇滚!!!
猜你喜欢
  • 2013-04-24
  • 2023-03-13
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-25
相关资源
最近更新 更多