gpt4 book ai didi

php - 如何在不明确的列名上产生错误消息?

转载 作者:行者123 更新时间:2023-11-29 02:34:10 27 4
gpt4 key购买 nike

我最近经常使用 CodeIgniter,使用数组方法查询数据:通常是 result_array()row_array() 数据库方法。我注意到有时会在没有错误通知的情况下发生错误(旧代码 - 不是我的 - 我只是错误修复者)。这是典型的不明确的列名问题,已在 StackOverflow 中多次发布。

例如: PHP & MYSQL: How to resolve ambiguous column names in JOIN operation?

有了 CodeIgniter,就没有模棱两可的字段错误消息了。该数组像往常一样填充字段名称;暧昧与否。有没有办法通过显示或记录错误消息来防止在 CodeIgnitier 中发生这种情况?

当出现不明确的字段问题时,有没有人知道如何使用 PHP 记录错误消息(也许使用 CI log_message())?

最佳答案

这是可能的。 CI 不会抛出关于不明确列名的 SQL 错误的原因是因为它在选择时附加了表的名称,例如

SELECT `table`.`name`, `table2`.`name` FROM `table`, `table2` ...

你看不到这些列的原因是 mysqli_fetch_assoc() 或你使用的任何驱动程序生成的数组键都是 name显然会被覆盖。以下答案适合使用 CI2.x 的人。

以我对 CodeIgniter: SQL Audit of all $this->db->query() method calls? 的回答中使用的类似方式扩展数据库驱动程序结果类.扩展数据库驱动程序结果类后,您有两个选择。您可以按照您的要求抛出错误,如下所示:

/**
* Result - associative array
*
* Returns the result set as an array
*
* @access private
* @return array
*/
function _fetch_assoc()
{
if (!($row = mysql_fetch_array($this->result_id)))
{
return null;
}

$return = array();
$row_count = mysql_num_fields($this->result_id);

for($i = 0; $i < $row_count; $i++)
{
$field = mysql_field_name($this->result_id, $i);

if( array_key_exists( $field, $return ) ) {
log_message('Error message about ambiguous columns here');
} else {
$return[$field] = $row[$i];
}
}

return $return;

//Standard CI implementation
//return mysql_fetch_assoc($this->result_id);
}

或者您可以通过将 tablename_ 添加到列名来进一步操纵函数的输出来模拟查询行为,从而产生类似这样的数组

SELECT * FROM `users` LEFT JOIN `companies` ON `users`.`id` = `companies`.`id`
Array (
[users_id] => 1
[users_name] => User1
[companies_id] => 1
[companies_name] => basdasd
[companies_share_price] => 10.00
)

要实现这一点,您可以简单地将上述函数中的 for 循环修改为以下内容:

for($i = 0; $i < $row_count; $i++)
{
$table = mysql_field_table($this->result_id, $i);
$field = mysql_field_name($this->result_id, $i);
$return["$table_$field"] = $row[$i];
}

关于php - 如何在不明确的列名上产生错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8015173/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com