‘壹’ php为什么弃用了mysql
PHP提供了三种不同的api连接到MySQL,这三种api是:mysql, mysqli以及PDO扩展。MySql函数是非常受欢迎的,但是官方团队并不鼓励再使用它们。在php手册里边,当你看到关于Mysql的函数,会发现都标有红色的标志,那意味着它们已经被弃用了。弃用ext/mysql函数不仅安全,而且使用其他数据库查询方法可以同样具有MySQL函数的所有功能。更好的方法是使用PDO代替ext/mysql函数。
以下是PHP里不应该再使用mysql函数的3大原因:
1、mysql函数已在PHP5.5中正式弃用,并将在PHP7中被删除。
2、mysql函数缺少面向对象的接口。
3、mysql函数不支持以下特性:
不支持非阻塞连续获取
不支持异步查询
不支持参数化查询
不支持存储过程
不支持多个语句
不支持在MySQL 5.1的中所有功能
不支持加密(SSL)
不支持压缩
不支持完整的字符集
‘贰’ 我想问一下,使用php向mysql插入数据,为什么报错插入不了
你的php系统不支持mysqli扩展,可以试一下改用原始的mysql扩展
‘叁’ PHP为何无法启动mysql服务
可能是你安装的时候,选择扩张功能时,应该选择安装mysql,前面不再显示巴叉,PHP.ini里面就会有。ext文件夹里也会有libmysql.dll了,我也碰到过这种情况。重新安装试试。
‘肆’ PHP无法连接mysql
用户名密码不对。
如果你是在本地测试,有数据库管理权限,可以查看下有没有 bookhbw这个用户
select * from mysql.user
如果没有可以新建用户,或者在代码里直接使用root账户及密码连接(测试环境无所谓,如果是正式环境,一定要单独建一个用户,分配对应数据库的权限 )
-- 创建用户
create user bookhbw@'localhost' identified by '密码';
-- 授权用户指定的数据库权限
GRANT ALL PRIVILEGES ON 数据库名.* TO 'bookhbw'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;
如果你的数据库中已经有这个账户,看下这个账户设置的Host 是localhost还是ip 还是 %
如果是ip 或者 % 则连接的服务器地址只能写ip 不能写localhost (可以新建一个同名用户绑定localhost)
以上情况,你根据自己的软件 配置,自行设置一下
‘伍’ php不支持mysql,怎么办
去php.ini 中打开 mysql 模块 具体php.ini路径可以在页面上 echo phpinfo() 查到
‘陆’ php无法打开mysql数据库
其实错误信息已经提示了错误的原因:
Warning: mysqli_select_db() expects parameter 1 to be mysqli, string given
警告:mysqli_select_db()的第1个参数应该是mysqli,而你给的是字符串
Warning: mysql_error() expects parameter 1 to be resource, object given in
警告:mysql_error()的第1个参数应该是个资源句柄,而你给的是个对象
据我的判断,可能你没有注意到这两个函数的正确用法,以下是这两个参数的原型:
bool mysqli_select_db ( mysqli $link , string $dbname )
string mysql_error ([ resource $link_identifier = NULL ] )
据此,建议代码修改如下:
$db_selected=mysqli_select_db($link,"homework")
至于“警告:mysql_error()的第1个参数应该是个资源句柄,而你给的是个对象”,这个错误的原因,据我的判断,你还需要检查下 $link 是不是正确连接到mysql了。
‘柒’ 数据库连不上,为什么我写的PHP代码一直连不上mysql数据库 报错=Fatal error: Ca
此函数未被定义 说明你的配置可能出现了问题: 1、确定你的MySQL服务启动了。 2、如果MySQL启动了还是这样,看一下phpinfo()中有没有MySQL模块。 没有的话修改php.ini使其支持MySQL,这方面的资料很多,自己搜吧。 记得要重启Apache服务。 有时候需要尝试多次重启,或把它晾那一会。 如果你的php是源码安装,那么你得在./configure时带--with-mysql=mysql_dir。如果是装系统时安装的,那么你可能没有选全php的安装包,php的包你可以用rpm -qa | grep php查查,应该有如下一些:php-imapphp-readlinephp-gdlibphp_common papache2-mod_phpphp-pgsqlphp-ldapphp-mysqlphp430-devel 其中你需要的起码有php-mysql和papache2-mod_php这两个包。 确保:mysql.allow_persistent = On mysql.max_persistent = -1 mysql.max_links = -1 mysql.default_host =localhost mysql.default_user =root mysql.default_password =你的mysql的root的口令 ;extension=/ext/php_mysql.dll 去掉前面的分号。 修改完就测一下phpinfo()中有没有mysql模块。 别人的php.ini你不一定能用,因为安装目录,环境,版本不一样。 所有配成功的人想必都花了大量的时间和精力。自己琢磨出来才是真的学会
‘捌’ php mysql数据库 不能连接
问题一
今天给本本装上mysql和php,一切安装都很正常([email protected])。但用phpmyadmin连接测试时却出现“#2002无法连接”的错误,用其它程序也是同样问题。
检查了下,php的mysql扩展正确安装,mysql服务正常启动--那就奇了怪了。又用navicat连接,居然连上了。。看来是php和mysql间的通讯出了问题。
网络了一下,问题被揪出来了:
mysql_connect()函数数据库服务器(server)参数当前设置为localhost,但当其更改为127.0.0.1后又可以正常访问。
系统hosts文件未提供127.0.0.1到localhost的解析。
解决方法(以win7系统为例):找到C:\Windows\System32\drivers\etc\hosts文件,默认为只读,你需要复制一份到其他路径如桌面,打开文件(打开方式:记事本),在文件末尾添加:
127.0.0.1 localhost
如果已存在去掉其前面的“#”。
问题二
php脚本可以正常运行,如phpinfo()。
只要一出现“mysql_connect”函数,就没反应,也不报错。
如 $conn = mysql_connect("127.0.0.1","root","xxxx") or die("MYSQL数据库连接失败:".mysql_error());
apache日志目录error.log中出现
PHP Warning: PHP Startup: Unable to load dynamic library 'c:\\php\\ext\\php_mysql.dll'
解决办法
将“libmysql.dll”复制到apache的bin目录下。然后重启,观察error.log,如果错误消失,那恭喜了。
另:网上资料也有说将““libmysql.dll””“php_mysql.dll”复制到windows/system32的。
问题三
代码如下 复制代码
<?//以上代码省略
$link_id=@mysql_connect( "localhost ", "sampadm ", "secret ");
//以下代码省略
?>
运行时出现如下提示:
fatal error: call to undefined function mysql_connect() in var/www/html/mytest.php
解决方法
1.php.ini中
extension_dir设置为 "d:\apache2\php\ext "绝对路径,否则有些环境中会出错。
打开下面两行功能扩展
extension=php_mysql.dll
extension=php_mysqli.dll
2.拷贝libmysql.dll(php目录下)和php_mysql.dll(php/ext目录下)至c:\windows\system32目录下(libmysql.dll必须为php目录下,比如我的为D:\apache2\php目录下的libmysql.dll,php_mysql.dll则在D:\apache2\php\ext)
3.测试,
1> 先打开命令行
A)依次点击“开始”菜单-> “mysql”-> “mysql5 server”-> “MySQL Command Line Client”
//如此步成功则mysql安全成功,失效则mysql安装失败,请卸载后重装
B)输入密码
//此步正常则说明 root账户的密码正确。失败则账号密码有错
2> 新建文件至主目录,并保存为testmysql.php,接着在浏览器中输入http://localhost/testmysql.php (或者http://localhost:81/testmysql.php)
如果不行查看一下apache是否加载了php与 mysql方法
apache中支置对php5的支持httpd.conf文件中加入下面三行
PHPIniDir "D:/ccopen/php5/"
LoadMole php5_mole "D:/ccopen/php5/php5apache2_2.dll"
AddType application/x-httpd-php .php
php.ini中去掉下面两行分号
extension=php_mysql.dll
extension=php_mysqli.dll
将php_mysql.dll和libmysql.dll拷到system32
重起apache服务器