php - 单个准备好的语句占位符不起作用

标签 php mysql prepared-statement

我在一台服务器上有以下代码。效果很好。

$developer_id = $_SESSION['auth']['id'];

$sql = "select sum(file_size) as total_storage_size, (select count(*) from language_set where developer_id = :DEVELOPER_ID) as total_projects, (select count(*) from testing_group where developer_id = :DEVELOPER_ID) as total_test_apps, (select count(*) from published_group where developer_id = :DEVELOPER_ID) as total_published_apps, account_type from resource JOIN language_set on resource.set_id = language_set.id JOIN developer on developer_id = developer.id where developer_id = :DEVELOPER_ID";

$stmt = $dbh->prepare($sql);
$stmt->bindParam(":DEVELOPER_ID", $developer_id, PDO::PARAM_INT);
$stmt->execute();
$account_info = $stmt->fetch(PDO::FETCH_ASSOC);

但是,当我将其移动到另一台服务器时,它给出了错误的结果。例如,它将 account_type 指定为“NULL”而不是“standard”。

我已将问题追踪到以下问题:

  • 从数据库中提取的 $developer_id 会变成字符串。如果我将它转换为 int ,它就可以正常工作。
  • 只有 sql 语句中的最后一个 :DEVELOPER_ID 出现问题,其他 :DEVELOPER_ID 在接受字符串值时没有问题

这是我的问题:

  1. 为什么它在运行 PHP 5.6 的服务器上运行良好,但在运行 PHP 7.0 的新服务器上运行不佳
  2. 为什么只有最后一个 :DEVELOPER_ID 有问题,而不是前三个?

最佳答案

类型转换在 PHP7 中更为重要。

在 PHP5 中你可以这样做:

$a = "9"; 打印(9*$a);

在 PHP7 中:

$a = "9"; 打印( 9 * (int) $a);

关于php - 单个准备好的语句占位符不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50301450/

相关文章:

php - 查询未插入数据库

php - 如何在逗号分隔的字符串中选择一个数字?

php - 使用 JOIN 从 ID 显示用户名

javascript - PHP 回显 jQuery AJAX 请求

c# - MySql.Data 与 MySql.Data.CF

mysql - "prepared statement has pending or unread results"是什么意思?

php - Laravel 涉及命名空间

mysql - 如何在sql中使用update来放置时间戳

php - 不能对数据库中的选择数据使用限制

sql - SQLite:“准备语句”不起作用