【问题标题】:PHP script with MySQL statement with single quote带有单引号的 MySQL 语句的 PHP 脚本
【发布时间】:2011-11-12 06:13:59
【问题描述】:

我正在学习PHP,MySQL,今天遇到了这个功能

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 了。

标签: php mysql function user-defined-functions


【解决方案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子句是什么意思。
      猜你喜欢
      • 2013-03-21
      • 1970-01-01
      • 2022-08-15
      • 1970-01-01
      • 2018-12-01
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      相关资源
      最近更新 更多