注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

由MYSQL权限引发的“一错再错”以及var_export()不能做什么  

2010-12-15 14:57:00|  分类: Web技术-应用研究 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

由MYSQL权限引发的“一错再错”以及var_export()不能做什么 
 错误前因: 
今天,我在开发一Buid系统(自动部署工具)时,我从名为'1.2',OS为WIN的客户端向 名为'1.3',OS为linux的服务器发送数据库操作的请求。
1.3上有类似于如下的代码:
  
    $link = mysql_connect($dbhost, $dbuser, $dbpw);
    if(empty($link) or !is_resource($link)) {
        return 1;
    }

    if(!mysql_select_db($dbname, $link)) {
        mysql_query("CREATE DATABASE`$dbname`");
        $dberror = mysql_error();
        if(!empty($dberror)) {
            return 2;
        }
    }


由以上代码,运行后老是返回2。

错误开始。
开始我想应是权限问题,可是我只是简单的想到了“既然是权限问题,那么链接时就不应该成功呀,应该返回1才是呀”。
一错
所以,我想看看到底$link是什么值,由于1.3是linux,而且是非browser去请求服务器,所以直接打印$link是看不到值的,我就使用了 如下代码:
  file_put_contents(dirname(__FILE__).'/link.php',var_export($link,true));

结果link.php里面值是 NULL。一看到是这个值,我是热血沸腾呀由MYSQL权限引发的“一错再错”以及var_export()不能做什么 - fc-lamp - fc-lamp的博客。。。。。。
    if(empty($link) or !is_resource($link)){
        return 1;
    }
为什么??这段代码没有执行呐???

再错
 这样,就把原本mysql的权限问题转移到了在linux上代码的严谨问题上去了。
    if(empty($link) or!is_resource($link)) {
        return 1;
    }
我对这段代码改了又改,查了又查,在PHP官网上把关于emtpty函数的所有资料看了个扁。
结果还是2,这下就相当杯具了。由MYSQL权限引发的“一错再错”以及var_export()不能做什么 - fc-lamp - fc-lamp的博客。。

错误终结

 
我努力使自己冷静了一会儿,既然那段代码多次改动,都是那样,我就当能连上数据库,至于link.php文件里的值为NULL,等会再说。

解决MYSQL
程序返回了2,那么还是说明是MYSQL方面的问题,于是我想到了用其它工具去连一下数据库,看看是否是权限问题。一连,果真是权限问题,只不过当前访问数据库的用户,只有链上数据库的权限,没操作数据库的权限。所以导致了代码 $link = mysql_connect($dbhost,$dbuser, $dbpw); 返回值是一个正常的资源类型,而代码 mysql_select_db($dbname, $link))    mysql_query("CREATE DATABASE `$dbname`"); 是不能被正常执行的。

VAR_EXPORT不能做什么
那么link.php文件里的NULL值是怎么会事呐??解铃人还须系铃人 NULL值是怎么产生的呐?看代码:
 file_put_contents(dirname(__FILE__).'/link.php',var_export($link,true));

对了,是由var_export产生的。那么,我们来看看var_export到底做了什么坏事。
原来,var_export可不像它兄弟那么听话,对于resources 类型 的变量,它就罢工了,官网上也有证实。

1 var_export() differs from print_r()for variables that are resources, with print_r() being more useful if you areusing the function for debugging purposes.
e.g.
<?php
$res = mysql_connect($dbhost, $dbuser, $dbpass);
print_r($res); //output: Resource id #14
var_export($res); //output: NULL
?>

2  Variables of typeresourcecouldn't be exported by this function.

3  var_export()does not handle circular referencesas it would be close to impossible to generate parsable PHP code for that. Ifyou want to do something with the full representation of an array or object,useserialize().


OK,整个事件就是这样的了,由mysql权限问题(只给了访问权限,没有操作权限)与var_export()问题 让我“汗“由MYSQL权限引发的“一错再错”以及var_export()不能做什么 - fc-lamp - fc-lamp的博客了不少~~

 

  评论这张
 
阅读(180)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017