2014-12-04 77 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

相关问题