[英]Joomla access denied for www-data while using mysql_real_escape_string()
[英]PHP mysql_real_escape_string(): Access denied for user 'www-data'@'localhost'
我剛剛將網站上傳到生產服務器上,但出現錯誤:
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 / conn.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產品服務器上使用虛擬主機。 不知道發生了什么...在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-data用戶。 所以我只是添加了用戶www-data,它在mysql中沒有密碼,也沒有特權,所以工作正常。 將來,我將嘗試使用所提及的PDO引用。 謝謝大家嘗試幫助我。
您可以使用PDO,也可以使用mysql擴展,不要同時使用兩者。 mysql_real_escape_string
是mysql擴展的功能。 它需要與數據庫的連接才能起作用。 調用它時,如果您以前未使用mysql_connect
建立連接,它將嘗試建立連接,對所需的登錄憑據進行賓語估計。 在您的本地計算機上,您顯然沒有密碼保護,並且MySQL用戶的帳戶名與Web服務器運行時使用的名稱相同,因此很幸運。 在生產系統上,憑據不同,並且無法建立連接。
停止在PDO中使用mysql_real_escape_string
。 要么使用PDO的字符串引用函數,要么更好地使用准備好的和參數化的查詢並bind
您的值 。
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
嘗試在Wordpress后端修改用戶搜索時遇到相同的問題,缺少的是正確的數據庫連接(不建議使用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;
}
}
通常,將數據庫連接設置為mysqli時會出現此問題,以解決此問題並使用mysql_real_escape_string()(即使已設置mysqli)。 只需轉到php.ini並找到:mysql.default_user參數並將值設置為默認用戶,例如:mysql.default_user = root
並重新啟動apache,您的問題現在已經解決了。
請注意,這個答案很糟糕,使您容易受到安全漏洞的攻擊。 這是錯誤的解決方案。 不要這樣做。 有關該問題的實際解決方案,請參閱下文。 這個答案被接受的事實意味着兩個人不知道他們在做什么。
這是因為您的mysql數據庫中沒有www數據!
您可以通過phpmyadmin添加www-data用戶,並且不賦予該用戶特權,並且該用戶應該可以使用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.