【问题标题】:Correct way of passing a PHP $variable to MySQLI [duplicate]将PHP $变量传递给MySQLI的正确方法[重复]
【发布时间】:2015-06-25 09:59:21
【问题描述】:

我想知道将 $variable 传递给查询的安全或正确方法。我是 PHP 新手,这就是为什么我要问这样的初学者问题。下面是例子一和二,由于符号的原因,哪一个是正确和安全的?

示例一:

//here is the line I am asking about. The $identification
$query = "SELECT * FROM `members` WHERE `username` = '$identification' LIMIT 1";

示例二:

//here is the line I am asking about. The $identification
$query = "SELECT * FROM `members` WHERE `username` = '" . $identification . "' LIMIT 1";

我不需要有关 PHP 4 或 5 或 PDO 的答案。我只需要知道什么是正确的:

这个

'" . $identification . "'

或者这个

'$identification'

【问题讨论】:

  • 无法在我的共享主机提供商上运行 php 5
  • 我不敢相信,你的 php 版本是多少?您的托管服务提供商是谁?
  • “无法在我的共享主机提供商上运行 php 5” - 您的问题中有 mysqli_ 代码。你猜怎么了; mysqli_ 在 PHP 5 上运行。php.net/manual/en/class.mysqli.php
  • 你好,弗雷德。真的吗?我的托管服务提供商说他们运行 4.5 或 4 点的东西。我试图运行一个脚本,但它没有工作

标签: php mysql arrays variables mysqli


【解决方案1】:

我建议您使用 PDO 而不是 mysqli 扩展(适用于 php 5.1 及更高版本)

http://code.tutsplus.com/tutorials/why-you-should-be-using-phps-pdo-for-database-access--net-12059

【讨论】:

  • 我编辑了这个问题,因为我要问的是没人在谈论的事情
【解决方案2】:

怎么样

 $query = 
 "SELECT * FROM `members` WHERE `username` = '" . 
 mysql_escape_string($identification) . 
 "' LIMIT 1";

http://php.net/manual/en/function.mysql-escape-string.php

但是,mysql_escape_string 已被弃用。如果可以的话,你应该使用mysql_real_escape_string

http://php.net/manual/en/function.mysql-real-escape-string.php

【讨论】:

  • Php 已弃用:“此扩展自 PHP 5.5.0 起已弃用,将来将被删除。应使用 MySQLi 或 PDO_MySQL 扩展。”
  • @Krycke,我知道,但 OP 已经声明他不能使用 > PHP 5
  • 好吧,但是如果他可以使用 PHP 版本 >= 4.3,那么至少应该使用 mysql_real_escape_string。
  • @Krycke,感谢您的建议。我已经更新了答案,
  • 我编辑了这个问题,因为我要问的是没人在谈论的事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 2016-02-23
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多