我正在学习PHP MYSQL并尝试创建数据库。
我正在学习本教程 http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app
到目前为止,我正在测试服务器是否可以访问MySQL。当我使用以下代码时。
?php
class RedeemAPI {
private $db;
// Constructor - open DB connection
function __construct() {
$this->db = new mysqli('localhost', 'username', 'password', 'promos');
$this->db->autocommit(FALSE);
}
// Destructor - close DB connection
function __destruct() {
$this->db->close();
}
// Main method to redeem a code
function redeem() {
// Print all codes in database
$stmt = $this->db->prepare('SELECT id, code, unlock_code, uses_remaining FROM rw_promo_code');
$stmt->execute();
$stmt->bind_result($id, $code, $unlock_code, $uses_remaining);
while ($stmt->fetch()) {
echo "$code has $uses_remaining uses remaining!";
}
$stmt->close();
}
}
// This is the first thing that gets called when this page is loaded
// Creates a new instance of the RedeemAPI class and calls the redeem method
$api = new RedeemAPI;
$api->redeem();
?
我收到以下错误:
Warning: mysqli::mysqli() [mysqli.mysqli]: [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) in /Users/user/Sites/promos/index.php on line 8
Warning: mysqli::mysqli() [mysqli.mysqli]: (HY000/2002): No such file or directory in /Users/user/Sites/promos/index.php on line 8
Warning: mysqli::autocommit() [mysqli.autocommit]: Couldn't fetch mysqli in /Users/user/Sites/promos/index.php on line 9
Warning: mysqli::prepare() [mysqli.prepare]: Couldn't fetch mysqli in /Users/user/Sites/promos/index.php on line 20
Fatal error: Call to a member function execute() on a non-object in /Users/user/Sites/promos/index.php on line 21
我是否忘记启用某些功能?
这可能解释了为什么我无法通过我的IP地址连接到续集专业版,只能连接到127.0.0.1?
答案 0 :(得分:17)
Apache服务器使用'127.0.0.1'而不是'localhost'
答案 1 :(得分:10)
您必须检查两个设置才能正常工作(假设您当然安装了MySQL服务器):
检查PHP配置中mysql.default_socket
的值。
检查[mysqld]
标题下MySQL配置文件中socket
的值。
这些价值必须相同;如果不是,请更改一个以匹配另一个并重新启动相应的服务。
答案 2 :(得分:2)
这似乎是一个普遍的问题,因为谷歌搜索会产生相当多的结果。我在我的两个Linux机箱上也经历过这种情况(但从未在Windows下),并且在某些时候我决定在所有开发服务器上使用127.0.0.1。基本上,localhost使得与MySQL服务器的连接使用套接字,但是您的配置没有正确指向套接字文件。
以下是一些您可能会觉得有用的资源:
http://westsworld.dk/blog/2011/03/problems-connecting-to-unixvarmysqlmysql-sock/ - 基本上是@Jack建议的,但更深入
Can't connect to MySQL on Mac -- missing mysql.sock file - 这里是如何找到你的套接字文件(出于某种原因,我的php.ini有错误的路径,我认为你的情况可能类似)。
我希望这会有所帮助。