带有单引号的 MySQL 语句的 PHP 脚本
Posted
技术标签:
【中文标题】带有单引号的 MySQL 语句的 PHP 脚本【英文标题】:PHP script with MySQL statement with single quote 【发布时间】:2011-11-12 06:13:59 【问题描述】:function get_director($director_id)
global $db;
$query = 'SELECT
people_fullname
FROM
people
WHERE
people_id = ' . $director_id;
$result = mysql_query($query, $db) or die(mysql_error($db));
$row = mysql_fetch_assoc($result);
extract($row);
return $people_fullname;
我了解什么是函数,我在学习PHP时创建了一些。但是这个有点复杂。我看不懂
WHERE people_id = ' . $director_id
我猜单引号结束了 MySQL 语句?然后将它与参数连接起来?
【问题讨论】:
为了避免 Sql Injection 你应该addSlashes($director_id)
mysql_real_escape_string()。不添加斜线。
@KyleBoddy,没错,我已经有一段时间没有使用非 PDO 了。
【参考方案1】:
是的,你是对的,单引号结束 sql 字符串并与提供的参数连接。如果您想将值打印出来,情况相同。
echo 'This is the director ID :'.$director_id;
【讨论】:
【参考方案2】:我不会将此运算符称为“SQL 语句”。也不会说它是“关闭的”。 对于 PHP,它只是一个没有特殊含义的字符串。 并且引号结束了这个字符串文字,而不是 SQL 语句。
这里严格来说只是一个串联,一个带变量的字符串字面量。
结果是完整的 SQL 语句。
【讨论】:
你能告诉我 $query 变量实际上是做什么的吗?具体来说,WHERE people_id = ' 是什么。 $director_id;部分代码做什么?从people_fullname拉数据的条件是什么 最好将此作为一个单独的问题提出。只发布这个不带 PHP 的查询,只发布不带引号的查询本身(使其与 people_id = 1 保持一致) 我只是想知道那个 WHERE 子句的含义。我应该为此发布一个单独的线程吗? 是的,完全正确。这个问题与PHP和函数无关。如果您对 SQL 有任何疑问 - 请单独提问【参考方案3】:.(dot) 在 php 中用于连接。 如果您将 32 传递给 $director_id,那么最终查询将是 从people_id = 32的人中选择people_name 如果您将 43 传递给 $director_id,那么最终查询将是 从 people_id = 43 的人中选择 people_name 表示 .(dot) 用于将 $director_id 的值附加到单引号中的字符串。 最终查询将传递给 mysql。使用 .(dot) 只是 php 中的一种方法,用于生成我们要在 mysql 中执行的最终查询。
【讨论】:
【参考方案4】:我猜单引号结束了 MySQL 语句?然后它与参数连接起来?请帮帮我。
没错。
http://php.net/manual/en/language.operators.string.php
<?php
$a = "Hello ";
$b = $a . "World!"; // now $b contains "Hello World!"
$a = "Hello ";
$a .= "World!"; // now $a contains "Hello World!"
?>
编辑:WHERE 子句的含义最好通过对整个语句作用的伪解释来解释。
选择每个人的全名,其中他们的 people_id 等于传递给函数的某个值。
但是,如果您正在评估这些事情并且不了解基本 SQL,那么您就太过分了。我建议你阅读整个 Tiztag PHP/MySQL 教程。
http://www.tizag.com/mysqlTutorial/
【讨论】:
请告诉我代码中那个WHERE子句是什么意思。以上是关于带有单引号的 MySQL 语句的 PHP 脚本的主要内容,如果未能解决你的问题,请参考以下文章