2014-12-04 97 views
2

我可以使用Mysql Workbench很好地訪問clearDB數據庫。在Heroku上使用php訪問clearDB數據庫時出現查詢錯誤

但是,當我在Heroku上使用php查詢數據庫時,它總是失敗。

這是我的代碼:

$url=parse_url(getenv("CLEARDB_DATABASE_URL")); 

$dbhost = $url["host"]; 
$dbuser = $url["user"]; 
$dbpass = $url["pass"]; 
$dbname = substr($url["path"],1); 

mysqli_connect($dbhost, $dbuser, $dbpass); 

mysqli_select_db($dbname); 

$sql = "SELECT * FROM `user_info` WHERE `user_account`='".$user_account."'"; 

$result = mysqli_query($sql) or die('MySQL query error'); 

USER_ACCOUNT是在數據庫中的表,$ USER_ACCOUNT是從客戶端用戶

幫我 感謝一個輸入變量

+0

'user_account'是表'user_info'中的表或字段嗎?如果您收到一個錯誤消息,請添加一條錯誤消息。 – 2014-12-04 14:41:41

+0

user_account是表user_info中的字段。而我剛剛收到'MySQL查詢錯誤' – user2865769 2014-12-18 08:02:17

+0

dzuelke解決了我的問題。感謝您的幫助 – user2865769 2014-12-18 08:03:03

回答

0

你不及格鏈接到mysqli_query()。您需要做到這一點,或使用面向對象的風格,並在連接上調用query()

你也有一個可能的SQL注入那裏,因爲$user_account可能含有「foo' OR 1 OR '」,返回的所有行(這只是一個簡單的,不是很邪惡的情況下),所以你應該逃避,使用mysqli_real_escape_string(),甚至更好,使用準備好的陳述

最後,而不是or die(),如何正確提取錯誤信息,甚至配置mysqli來拋出異常?

<?php 
$url = parse_url(getenv("CLEARDB_DATABASE_URL")); 

$server = $url["host"]; 
$username = $url["user"]; 
$password = $url["pass"]; 
$db = substr($url["path"], 1); 

$conn = new mysqli($server, $username, $password, $db); 

$sql = "SELECT * FROM `user_info` WHERE `user_account`='".$conn->real_escape_string($user_account)."'"; 

if($result = $conn->query($sql)) { 
    foreach($result as $row) { 
     // ... 
    } 
} else { 
    throw new Exception($conn->error); 
} 
+0

感謝您解決我的問題。 – user2865769 2014-12-18 08:09:12

相關問題