2013-01-24 56 views
0

我有以下的PHP代碼:PHP/MySQL的訪問被拒絕用select into OUTFILE

<?php 

$hostname="db."; 
$database="db.."; 
$username="db..."; 
$password="pw..."; 
$mysql = mysql_connect($hostname, $username, $password); 

if(!$mysql) 
echo 'Not conneted to the database...' . mysql_error() ; 
else 
echo 'Connected to the database...' ; 

// select the appropriate database 
$mysqldb = mysql_select_db($database); 
if(!$mysqldb) 
die('Could not select the database...' . mysql_error()); 
else 
echo '<br /><br />Connected to database...<br /><br />' ; 

$chk_table_access = 'select * from table_name where 1'; 
$chk_access = mysql_query($chk_table_access); 
echo $chk_table_access . '<br /><br />'; 
if (!$chk_access) 
echo 'Could not access table: ' . mysql_error() ; 
else 
echo 'Table was accessed..<br /><br />' ; 

$backup = 'SELECT * INTO OUTFILE "result.csv" FIELDS TERMINATED BY "," OPTIONALLY  ENCLOSED BY '; 
$backup = $backup . "'" . '"' . "'" ; 
$backup = $backup . ' FROM cities WHERE 1'; 
echo $backup . '<br /><br />'; 
$bk_success = mysql_query($backup); 
if (!$bk_success) 
echo 'The backup was not successful. Reason: ' . mysql_error(); 
?> 

程序運行在本地主機上很好,但是當我從我的網站運行它,我得到以下錯誤:訪問被拒絕用戶'dbo ????????'@'%'(使用密碼:YES)。網絡幫助沒有太大的幫助。

我確實得到了「表被訪問..」的消息,所以我正在訪問表。我每天都會毫不猶豫地對目錄做些簡單的事情。我明白爲什麼它不適用於phpMyAdmin。我有點難住。這也是我在這個論壇上提出的第一個問題,儘管我經常來這裏尋求幫助。你們(包括女士們)搖滾。 在此先感謝, 史蒂夫

+0

有幾件事情可以改善你的代碼。在做查詢時,你不需要'WHERE 1'。 'SELECT * FROM table'會給你一切。另外,爲了使閱讀更容易,試試: ''SELECT * INTO OUTFILE'result.csv「FIELDS TERMINATED BY」,「OPTIONALLY ENCLOSED BY \'」\'FROM cities''你不必切換回和「之間」和「以獲得其他變量。 – UnholyRanger

+0

謝謝。我傾向於包含where 1子句來表示意圖。 – Steve

回答

0

您的MySQL用戶顯然缺乏FILE privilege

MySQL服務器與Web服務器運行在同一臺機器上嗎?如果兩臺服務器運行在不同的機器上,則可以在此停止:即使具有FILE權限,輸出文件也會在數據庫服務器上創建(並且可能無法從Web服務器訪問)。

+0

這是一種可能性。我使用託管服務器。我將如何檢查? Steve – Steve

+0

使用'SHOW GRANT'(例如在phpMyAdmin中)列出授予用戶的所有權限。 – helmbert