我刚刚在生产服务器上上传了我的网站,我得到了错误:
Warning: mysql_real_escape_string(): Access denied for user 'www-data'@'localhost' (using password: NO) in file.php on line 106
Warning: mysql_real_escape_string(): A link to the server could not be established in file.php on line 106
函数的代码是
include('./../inc/conn.php');
if(isset($_GET['query']))$q = clean($_GET['query']);
function clean($var){
return(mysql_real_escape_string($var));
}
inc/cont.php的代码:
try {
$dns = 'mysql:host=localhost;dbname=mydatabase';
$user = 'root';
$pw = 'rootpw';
$options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
$db = new PDO( $dns, $user, $pw, $options );
} catch ( Exception $e ) {
echo "Connection error : ", $e->getMessage();
die();
}
我真的不知道发生了什么,因为我在本地的dev ubuntu服务器上没有问题。Mysql、apache和php版本是相同的。唯一的问题是我在apache prod服务器上使用虚拟主机。不知道怎么回事..。在apache或php配置中,我遗漏了什么吗?
编辑这里是我文件夹的权限:
sudo ls -l /home/user/public/domain.com/www/
total 28
drwxrwxr-x 13 user www-data 4096 Aug 22 12:30 adodb5
drwxrwxr-x 2 user www-data 4096 Aug 22 12:30 ajax
drwxrwxr-x 2 user www-data 4096 Aug 22 12:31 css
drwxrwxr-x 9 user www-data 4096 Aug 22 12:33 gfx
drwxrwxr-x 2 user www-data 4096 Aug 22 12:33 inc
drwxrwxr-x 2 user www-data 4096 Aug 22 12:34 js
我的apache虚拟主机配置
<VirtualHost *:80>
# Admin email, Server Name (domain name), and any aliases
ServerAdmin contact@domain.com
ServerName www.domain.com
ServerAlias domain.com
# Index file and Document Root (where the public files are located)
DirectoryIndex index.html index.php
DocumentRoot /home/user/public/domain.com/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/user/public/domain.com/www>
Options FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
# Log file locations
LogLevel warn
ErrorLog /home/user/public/domain.com/log/error.log
CustomLog /home/user/public/domain.com/log/access.log combined
</VirtualHost>
编辑2
好的,问题是我在mysql服务器上没有任何www数据用户。因此,我只是在mysql中添加了没有密码和特权的用户www-数据,这是很好的。我将在未来尝试使用PDO引用了这么多提到。谢谢大家帮我。
发布于 2013-09-11 13:56:01
注意到,这个答案很糟糕,会使您面临安全漏洞。这是错误的解决办法。别这么做。请进一步了解问题的实际解决方案。这个答案被接受的事实仅仅意味着的人不知道他们在做什么。
这是因为mysql数据库中没有www数据!
您可以通过phpmyadmin添加www-data用户,并且不给该用户任何特权,它应该可以工作。
发布于 2013-08-22 12:30:48
mysql_real_escape_string
需要一个有效的链接标识符(由mysql_connect()
返回),请参见http://php.net/manual/en/function.mysql-real-escape-string.php
link_identifier: MySQL连接。如果未指定链接标识符,则假定
mysql_connect()
打开的最后一个链接。如果没有找到这样的链接,它将尝试创建一个链接,就像调用mysql_connect()
时没有参数一样。如果没有找到或建立连接,则会生成E_WARNING级别错误。
您的连接由PDO打开,因此您没有任何有效的mysql_real_escape_string
链接标识符。
尝试使用PDO::quote
发布于 2015-02-25 17:59:11
在Wordpress后端尝试修改用户搜索时,我也遇到了同样的问题,缺少的是一个适当的db连接(也不推荐mysql_real_escape_string() )。全局在wp-config.php中定义。
这就是工作功能。注意$con变量。更多解释可用的这里。
if(is_admin()) {
add_action( 'pre_user_query', 'user_search_by_email' );
function user_search_by_email($wp_user_query) {
if(false === strpos($wp_user_query->query_where, '@') && !empty($_GET["s"])) {
$con = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
$wp_user_query->query_where = str_replace(
"user_nicename LIKE '%".mysqli_real_escape_string($con, $_GET["s"])."%'",
"user_nicename LIKE '%".mysqli_real_escape_string($con, $_GET["s"])."%' OR user_email LIKE '%".mysqli_real_escape_string($con, $_GET["s"])."%'",
$wp_user_query->query_where);
mysqli_close($con);
}
return $wp_user_query;
}
}
https://stackoverflow.com/questions/18378976
复制相似问题