【问题标题】:MySQL new library and notepad++MySQL 新库和记事本++
【发布时间】:2013-03-08 15:04:05
【问题描述】:
据我了解,普通的 mysql mysql.* 方法库已被库 mysqli.* 所取代。从本质上讲,我的理解是新库使用所有旧方法,只是在方法名称的末尾标记了字母“i”。三个问题:
- 为什么 MySQL 更新了这个库,它包含了哪些新特性?
- 对于 Notepad++ 的用户,可以从下拉菜单中选择语言,然后像 IDE 一样突出显示代码,例如方法为蓝色和粗体。当我第一次写一些 MySQL 代码时,我使用了旧的库方法,没有意识到进步。当我将其转换为新的库方法时,蓝色/粗体突出显示消失并恢复为正常字体。当我删除方法名称中的“i”时,它再次突出显示。为什么 Notepad++ 不能识别新方法?
- 是否需要新方法(即旧方法在 PHP 中仍然有效)?
【问题讨论】:
标签:
php
mysql
mysqli
notepad++
【解决方案1】:
使用记事本++,高亮mysqli,然后
- 打开记事本选择设置
- 选择样式配置器
- 语言选择php
- 在样式中选择 WORD
- 在用户定义的关键字中输入要突出显示的关键字。
确保 false 后有一个空格(第一项。)
下面是一个列表(这是我使用的。)
- 保存并关闭。
真假
mysqli_affected_rows
mysqli_autocommit
mysqli_change_user
mysqli_character_set_name
mysqli_close
mysqli_commit
mysqli_connect_errno
mysqli_connect_error
mysqli_connect
mysqli_data_seek
mysqli_debug
mysqli_dump_debug_info
mysqli_errno
mysqli_error_list
mysqli_error
mysqli_fetch_all
mysqli_fetch_array
mysqli_fetch_assoc
mysqli_fetch_field_direct
mysqli_fetch_field
mysqli_fetch_fields
mysqli_fetch_lengths
mysqli_fetch_object
mysqli_fetch_row
mysqli_field_count
mysqli_field_seek
mysqli_field_tell
mysqli_free_result
mysqli_get_charset
mysqli_get_client_info
mysqli_get_client_stats
mysqli_get_client_version
mysqli_get_connection_stats
mysqli_get_host_info
mysqli_get_proto_info
mysqli_get_server_info
mysqli_get_server_version
mysqli_info
mysqli_init
mysqli_insert_id
mysql_kill
mysqli_more_results
mysqli_multi_query
mysqli_next_result
mysqli_num_fields
mysqli_num_rows
mysqli_options
mysqli_ping
mysqli_prepare
mysqli_query
mysqli_real_connect
mysqli_real_escape_string
mysqli_real_query
mysqli_reap_async_query
mysqli_刷新
mysqli_rollback
mysqli_select_db
mysqli_set_charset
mysqli_set_local_infile_default
mysqli_set_local_infile_handler
mysqli_sqlstate
mysqli_ssl_set
mysqli_stat
mysqli_stmt_init
mysqli_store_result
mysqli_thread_id
mysqli_thread_safe
mysqli_use_result
mysqli_warning_count
【解决方案2】:
我无法为您回答第 1 个问题,因为我不知道详细信息。
2:不知道为什么默认不包含,但是可以手动添加。
转到设置-> 样式配置器并在语言下选择 php。在 style 下选择 WORD。
在名为“用户定义的关键字”的框中添加您使用的所有 mysqli_* 函数。从现在开始,它们将被突出显示。
3:目前,它们会起作用。它在 5.5 中已被弃用,这意味着它会在您使用它时引发警告。最终,它将被完全删除。不过,请切换到 mysqli,这样升级时不会出现任何问题。
【解决方案3】:
来自 PHP.net 关于databases 的常见问题解答
为什么不鼓励使用我使用了 10 多年的 MySQL 扩展 (ext/mysql)?是否已弃用?我用什么
反而?如何迁移?
如Choosing a
MySQL API 部分所述,共有三个 MySQL 扩展。旧的 API 不应该使用,总有一天
将被弃用并最终从 PHP 中删除。这是一个受欢迎的
扩展,所以这将是一个缓慢的过程,但你强烈
鼓励使用mysqli 或
PDO_MySQL。
迁移脚本目前不可用,虽然 mysqli
API 包含程序和 OOP API,其中程序
版本类似于 ext/mysql。
不能混合扩展。因此,例如,通过
mysqli 与 PDO_MySQL 或 ext/mysql 的连接将不起作用。
关于 Notepad++ 功能的问题,您必须在他们的官方论坛/社区中提问。
您的第三个问题的回答隐藏在上面的摘录中:
旧的 API不应使用,总有一天它会被弃用并最终从 PHP 中删除。这是一个受欢迎的扩展,因此这将是一个缓慢的过程,但强烈建议您编写所有新代码 使用mysqli 或PDO_MySQL。
【解决方案4】:
1) 根据php.net's overview
- 面向对象的界面
- 支持准备好的语句
- 支持多条语句
- 交易支持
- 增强的调试功能
- 嵌入式服务器支持
2) 我从来没有用过 Notepad++,我用的是 Sublime Text 2。文本编辑器可能不适合所有语言,所以也许有一个用于 mysqli 的 Notepad++ 插件?
3) The MySql overview 说:
此扩展自 PHP 5.5.0 起已弃用,不推荐用于编写新代码,因为它将在未来被删除。
进行切换可能是一个好主意,它肯定不会受到伤害,并且及时了解 PHP 与 MySql 交互的方式肯定会很好。
编辑:对我来说,编写 MySqli 比 MySql 更流畅,因为在使用 MySqli 类时我不必在查询末尾包含连接。
$query = $mysqli->query("SELECT * FROM table");
代替
$query = mysql_query("SELECT * FROM table",$link);
【解决方案5】:
基本上,我的理解是新库使用了所有旧方法,只是在方法名称的末尾加上了字母“i”。
不一定。 mysqli 函数现在有两种形式,一种是过程式的(如旧的mysql ),一种是面向对象的风格。 (例如$result->fetch_array())。
来自php.net
mysqli 扩展具有双重接口。它支持过程式和面向对象的编程范式。
一些新的mysqli 函数也接受与旧函数不同的参数。大多数情况下,大多数函数现在都需要一个mysqli 链接(mysqli 连接)作为它们的参数。
至于为什么要改,显然有几个原因。最重要的是安全性和稳定性,引入新的 OO 样式一定是原因之一。
看看这个有什么好处:MySQLi extension benefits