【发布时间】:2018-11-18 20:46:26
【问题描述】:
我刚刚在我的 macbook pro 上安装了 mysql,mysql 似乎正在工作,但是我无法通过 mysqli 从 php 连接到 mysql。我不断收到错误。我已经阅读了许多不同的文章和网页,所有这些看起来都很复杂,并没有解决我的问题。
我已将 /tmp/mysock 添加到 php.ini 文件中:
pdo_mysql.default_socket= /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock
我已经单独安装了 apache、php、mysql,没有使用 MAMP、XAMP、phpmyadmin 或 MYSQLworkbench 等软件
这是我尝试连接数据库的 PHP 代码,代码后面是浏览器上显示的错误。
<?php
$title = $_POST['blog_title'];
$body = $_POST['blog_entry'];
$link = mysqli_connect('localhost','root','password','blog');
if (!$link) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit;
}
mysqli_select_db($link,"blog") or die("Unable to select database");
$query = "INSERT INTO entires(title,body) VALUES ($title,$body);";
mysqli_query($query);
mysqli_close($link);
header('Location: ViewBlog.php');
exit();
?>
这是我得到的错误:
错误:无法连接到 MySQL。调试错误:2054 调试错误:服务器请求客户端未知的身份验证方法
我一直在努力解决这个问题,任何帮助将不胜感激,谢谢。 我正在尝试访问的数据库,我已经在 mysql ("blog") 中创建了;
【问题讨论】:
-
听起来像是配置问题,而不是您的代码问题。你检查过Super User 或Server Fault吗?
-
注意:
mysqli的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query接口混淆。在您对程序风格投入过多之前,值得转换一下。示例:$db = new mysqli(…)和$db->prepare("…")过程化接口是 PHP 4 时代引入mysqliAPI 时的产物,不应在新代码中使用。 -
警告:当使用
mysqli时,您应该使用parameterized queries 和bind_param将用户数据添加到您的查询中。 不要使用字符串插值或连接来完成此操作,因为您创建了一个严重的SQL injection bug。 切勿将$_POST、$_GET或任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。 -
您好 tadman,感谢您提供的有关 oo 界面的提示,这无法解决我遇到的配置问题。关于警告,这是一个初学者项目。
标签: php mysql sql mysqli localhost