一段方法,求大神指点下错误 本帖最后由 ymkacscc20 于 2012-12-13 02:53:59 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 已经可以了,不用优化了,很重要是相对于你的程序而言,是相对的很重要,并非绝对你这个function如果放入我的程式里,可能根本用不到,所以对我的程式而言上边所有的代码我都可以随意删掉,所以就没有重要性可言了. 这位高手,请问为什么不重要呢,按层次来search想要的employee,觉得还是挺重要的。 这段代码唯一可说重要的是 $this->dbh->quoteSmart( $_employee_id )不过从 quoteSmart 字面上看,只是提供一个转义功能。如果仅仅是转义,那么又显得多余了。因为数字是不需要转义的。如果是字符串的话,在构造出的查询串中又没有将其用引号括起如果 $this->dbh->quoteSmart( $_employee_id ) 返回的是 $_employee_id 的原值的话那么 "employee_manager_id = " . $this->dbh->quoteSmart( $_employee_id ) 之后将返回employee_manager_id=$_employee_id 的全部记录而下面递归调用时的 $_employee_id = $_row['employee_manager_id']由于 $_employee_id 并未发生改变,于是就将陷入死循环所以 $this->dbh->quoteSmart( $_employee_id ) 应该返回一个不同于 $_employee_id 的值因此他就是至关重要的了 加一下註釋就不難理解了function get_employees_by_hierarchy( $_employee_id = 0,$_depth = 0,$_org_array = array() ) { if ( $this->org_depth < $_depth ) {//如果类的属性org_depth值小于$_depth $this->org_depth = $_depth;//类的属性值$_depth等于$_depth } $_depth++;//累加 $_query = "SELECT * FROM employees WHERE ";//创建查询语句 if ( !$_employee_id ) {//如果变量的值是0或者false $_query .= "employee_manager_id IS NULL OR employee_manager_id = 0";//查询语句的值追加新内容 } else { //如果变量的值是true或不为0 $_query .= "employee_manager_id = " . $this->dbh->quoteSmart( $_employee_id );//查询语句的值追加新内容,quoteSmart这个方法做了什么,就要看方法的实现代码了 } $_result = $this->query( $_query );//执行查询语句 while ( $_row = $_result->fetchRow() ) {//拆分结果集 $_row['depth'] = $_depth;//给数组赋予值 array_push( $_org_array, $_row );//将结果入栈 $_org_array = $this->get_employees_by_hierarchy($_row['employee_manager_id'],$_depth,$_org_array);//不知道get_employees_by_hierarchy这个方法做了啥,不好说 } return $_org_array;//返回值} 新建一个项目index.php文件里写些什么? 纯散分技术贴 php正则表达式 匹配问题 急 麻烦哪位 学哥学姐有时间帮我看看 请教一个关于GD方面的问题? 在mysql control center中查询正常,怎么用php显示不出来,帮忙看看,多谢 数据列表如何用颜色来标记??有没有更好的方法?? 帮帮忙, 怎样用pear DB连数据库,看看我的最简单代码 求无需数据库支持的的PHP聊天室源码 如果一个form里有几个图形提交按钮,怎么判断提交数据是由哪个按钮提交的? php中分页显示的问题 $_GET["page"]为空 PHP连接mysql错误
你这个function如果放入我的程式里,可能根本用不到,所以对我的程式而言上边所有的代码我都可以随意删掉,所以就没有重要性可言了.
不过从 quoteSmart 字面上看,只是提供一个转义功能。如果仅仅是转义,那么又显得多余了。因为数字是不需要转义的。如果是字符串的话,在构造出的查询串中又没有将其用引号括起如果 $this->dbh->quoteSmart( $_employee_id ) 返回的是 $_employee_id 的原值的话
那么 "employee_manager_id = " . $this->dbh->quoteSmart( $_employee_id ) 之后将返回
employee_manager_id=$_employee_id 的全部记录
而下面递归调用时的 $_employee_id = $_row['employee_manager_id']
由于 $_employee_id 并未发生改变,于是就将陷入死循环所以 $this->dbh->quoteSmart( $_employee_id ) 应该返回一个不同于 $_employee_id 的值
因此他就是至关重要的了
function get_employees_by_hierarchy( $_employee_id = 0,$_depth = 0,$_org_array = array() ) {
if ( $this->org_depth < $_depth ) {//如果类的属性org_depth值小于$_depth
$this->org_depth = $_depth;//类的属性值$_depth等于$_depth
}
$_depth++;//累加
$_query = "SELECT * FROM employees WHERE ";//创建查询语句
if ( !$_employee_id ) {//如果变量的值是0或者false
$_query .= "employee_manager_id IS NULL OR employee_manager_id = 0";//查询语句的值追加新内容
}
else { //如果变量的值是true或不为0
$_query .= "employee_manager_id = " . $this->dbh->quoteSmart( $_employee_id );//查询语句的值追加新内容,quoteSmart这个方法做了什么,就要看方法的实现代码了
}
$_result = $this->query( $_query );//执行查询语句 while ( $_row = $_result->fetchRow() ) {//拆分结果集
$_row['depth'] = $_depth;//给数组赋予值
array_push( $_org_array, $_row );//将结果入栈
$_org_array = $this->get_employees_by_hierarchy($_row['employee_manager_id'],$_depth,$_org_array);//不知道get_employees_by_hierarchy这个方法做了啥,不好说
}
return $_org_array;//返回值
}