当前位置: 首页 > 面试题库 >

参考:使用MySQL扩展的完美代码示例是什么?[关闭]

岳嘉容
2023-03-14
问题内容

很难说出这里的要求。这个问题是模棱两可的,模糊的,不完整的,过于广泛的或修辞性的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开,
请访问帮助中心。

7年前关闭。

这是为了创建 社区学习资源
。我们的目标是拥有一些好的代码示例,这些示例不会重复在复制/粘贴的PHP代码中经常发现的严重错误。我已要求将其设为Community Wiki。

不是编码竞赛。 这并不是要找到最快或最紧凑的查询方式,而是要为新手提供良好的可读性参考。

每天,都会使用Stack Overflow上的函数系列大量涌入带有 非常糟糕的
代码片段的问题mysql_*。尽管通常最好是将这些人员引导到PDO,但有时这既不可能(例如,继承的遗留软件),也没有现实的期望(用户已经在其项目中使用了它)。

使用该mysql_*库的代码的常见问题包括:

  • SQL注入值
  • 限制子句和动态表名称中的SQL注入
  • 没有错误报告(“为什么此查询不起作用?”)
  • 错误的错误报告(即,即使将代码投入生产,也总是会发生错误)
  • 跨站点脚本(XSS)注入值输出

让我们编写一个PHP代码示例,该示例使用mySQL_
*系列函数执行以下操作:

  • 接受两个POST值,id(数字)和name(字符串)
  • 对表执行UPDATE查询tablename,更改nameID为1的行中的列id
  • 发生故障时,请优雅地退出,但仅在生产模式下显示详细错误。trigger_error()就足够了; 或者使用您选择的方法
  • 输出消息“ $name更新”。

并且 没有 显示出上面列出的任何弱点。

它应该 尽可能简单 。理想情况下,它不包含任何函数或类。目标不是创建可复制/粘贴的库,而是 显示使数据库查询安全所需要做的最少工作。

奖励积分可带来好评。

目的是使该问题成为用户遇到错误代码(即使它根本不是问题的重点)或遇到查询失败且没有错误的提问者时可以链接到的资源知道如何解决它。

要抢先讨论PDO,请执行以下操作:

是的,通常最好将写这些问题的个人引导到PDO。如果可以选择,我们应该这样做。但是,这并非总是可能的-
有时,问问者正在处理遗留代码,或者已经对该库进行了很长的探索,并且现在不太可能更改它。此外,mysql_*如果正确使用这些功能,则是完全安全的。因此,请在这里没有“使用PDO”的答案。


问题答案:

我的刺。试图使其尽可能简单,同时仍保留一些实际的便利。

处理unicode并使用松散比较来提高可读性。对人好点 ;-)

<?php

header('Content-type: text/html; charset=utf-8');
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
// display_errors can be changed to 0 in production mode to
// suppress PHP's error messages

/*
Can be used for testing
$_POST['id'] = 1;
$_POST['name'] = 'Markus';
*/

$config = array(
    'host' => '127.0.0.1', 
    'user' => 'my_user', 
    'pass' => 'my_pass', 
    'db' => 'my_database'
);

# Connect and disable mysql error output
$connection = @mysql_connect($config['host'], 
    $config['user'], $config['pass']);

if (!$connection) {
    trigger_error('Unable to connect to database: ' 
        . mysql_error(), E_USER_ERROR);
}

if (!mysql_select_db($config['db'])) {
    trigger_error('Unable to select db: ' . mysql_error(), 
        E_USER_ERROR);
}

if (!mysql_set_charset('utf8')) {
    trigger_error('Unable to set charset for db connection: ' 
        . mysql_error(), E_USER_ERROR);
}

$result = mysql_query(
    'UPDATE tablename SET name = "' 
    . mysql_real_escape_string($_POST['name']) 
    . '" WHERE id = "' 
    . mysql_real_escape_string($_POST['id']) . '"'
);

if ($result) {
    echo htmlentities($_POST['name'], ENT_COMPAT, 'utf-8') 
        . ' updated.';
} else {
    trigger_error('Unable to update db: ' 
        . mysql_error(), E_USER_ERROR);
}


 类似资料:
  • 本文向大家介绍Ruby使用C++扩展实例(含C++扩展代码示例),包括了Ruby使用C++扩展实例(含C++扩展代码示例)的使用技巧和注意事项,需要的朋友参考一下 早年写过用C++ + SWIG写Ruby插件的文,但实际中还是以原生C++写Ruby扩展,因为也相当简单。但长久没用还是会忘记,不得不翻以前的老代码回忆,写下这篇博文,若下次再忘记,也不至于去翻仓库。 建立 extconf.rb 建立

  • 开源demo 目前提供了完整的Java版开源示例demo,便于您快速的熟悉Java开发工具包的使用及接口的调用。Java版demo 意见反馈 在开发过程中,您有任何问题或者建议,可直接与我们联系。 客服电话:400-161-0019 电子邮箱:service@qingtui.cn

  • 扩展是可定制化浏览体验的小程序,它们使用户可以根据个人需要或者偏好定制 Chrome 的功能和行为。它们基于 Web 技术(例如 HTML,JavaScript 和 CSS)构建。 扩展必须满足狭义定义且易于理解的单一目的(译者注:功能简单易懂化)。一个扩展可以包括多个组件和一系列功能,只要所有的内容都有助于实现共同的目标。 用户交互界面应尽量小且有意图。他们的范围从简单的图标,如右侧显示的 Go

  • 示例的Python源代码或者交互界面都可以使用标准reST模块实现.在正常段落后面跟着 :: 开始,再加上适当缩进. 交互界面需包含提示及Python代码的输出. 交互界面没有特别的标记. 在最后一行输入或输出之后,不应出现空的提示; 这是一个什么都不做的例子: >>> 1 + 1 2 >>> 语法高亮显示由 Pygments (如果安装) 优雅的显示: 每个源文件都有高亮语言”highlight

  • 本节将会详细介绍VS Code可扩展性的各种功能,并深入到其内部细节。在开始之前,建议回顾之前关于扩展部分以及范例'Hello World'。 查看VS Code扩展运行的最简单方法是通过扩展市场。当你编写好了你的第一个插件后或者准备分享你的定制化信息后,那么你可以把它发布出去,供他人下载并安装。 可扩展性参考文档 在本节中将会讲述以下几个主题: 主题 描述 package.json 扩展清单 每

  • 我特别想知道: 扩展名驻留在哪里(文件和命名约定)? 什么是扩展语法? 几个简单的常用示例是什么?