我在一台服务器上有以下代码。效果很好。
$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 在接受字符串值时没有问题
这是我的问题:
- 为什么它在运行 PHP 5.6 的服务器上运行良好,但在运行 PHP 7.0 的新服务器上运行不佳
- 为什么只有最后一个 :DEVELOPER_ID 有问题,而不是前三个?
最佳答案
类型转换在 PHP7 中更为重要。
在 PHP5 中你可以这样做:
$a = "9"; 打印(9*$a);
在 PHP7 中:
$a = "9"; 打印( 9 * (int) $a);
关于php - 单个准备好的语句占位符不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50301450/