Oracle表列数统计异常:PHP执行SQL返回Resource id而非数值
问题原因及解决办法
核心原因:
executePlainSQL执行SQL后返回的是数据库查询结果集(资源对象),不是直接的统计数值。直接输出这个对象时,PHP会打印它的资源ID(比如Resource id #6),而非你需要的列数。解决步骤:
- 执行统计SQL后,必须从结果集中提取具体数值。根据你用的Oracle扩展(比如OCI8),用对应的方法(如
oci_fetch_array、oci_fetch_assoc)取出数据。 - 你的代码存在严重的SQL注入风险,直接把POST参数拼进SQL里很容易被攻击,建议改用绑定变量的方式。
- 执行统计SQL后,必须从结果集中提取具体数值。根据你用的Oracle扩展(比如OCI8),用对应的方法(如
修正后的示例代码:
$tableName = $_POST['TableName']; // 使用绑定变量防范SQL注入 $stmt = oci_parse($conn, "SELECT COUNT(*) AS col_count FROM user_tab_columns WHERE table_name = :table_name"); oci_bind_by_name($stmt, ':table_name', $tableName); oci_execute($stmt); // 从结果集中取出统计值 $row = oci_fetch_assoc($stmt); $countTotColumn = $row['COL_COUNT']; echo "The total Number of attribute is: {$countTotColumn}";
- 如果用封装函数的补充处理:
要是你的executePlainSQL是封装好的执行函数,返回的是结果集,那需要在获取结果后额外提取数值:
$countResult = executePlainSQL("SELECT COUNT(*) FROM user_tab_columns where table_name = '{$tableName}'"); // 用oci_fetch_array取出结果,取第一个元素就是计数 $row = oci_fetch_array($countResult); $countTotColumn = $row[0];
内容的提问来源于stack exchange,提问作者hodondo
相关产品推荐
相关产品推荐

