【问题标题】:MySQL SELECT query seems to skip spacesMySQL SELECT 查询似乎跳过了空格
【发布时间】:2013-09-06 13:46:46
【问题描述】:

我是 PHP 和 mySQL 的初学者,我正在将它用于我的项目。我的查询有点问题。

这是我的代码:

    $doctname = mysql_query("SELECT name_of_doctor FROM {$table} WHERE department_no = '{$_REQUEST['deptno']}'");
    $doctnamerow = mysql_fetch_row($doctname);

    do
    {
        foreach ($doctnamerow as $cell)
        {
            $doctnamerowvalue = $cell;
        }
    } while ($doctnamerow = mysql_fetch_row($doctname));

所以我遇到的问题是,如果医生的名字之间有空格(例如“AJ Ramos”),那么它似乎会跳过空格,只返回“AJ”而不是姓氏。我该怎么做呢?谢谢=)

编辑:

愚蠢的我,这只是我的代码的一个错误,我使用 $doctnamerowvalue 作为我的一个文本框的 value=$doctnamerow 并且忘记放双引号,这导致 value=doctor name 而不是 value= “医生姓名”。对不起

【问题讨论】:

  • ?deptno='; DROP TABLE doctors;--
  • 您是如何确定您的返回值被截断的(请出示代码)。另外,您的foreach 循环有什么意义?
  • 你的表结构是什么?
  • @RandomSeed 感谢您提醒我确定我的返回值是否被截断。这只是我的语法错误。我使用 $doctnamerowvalue 作为我的一个文本框的值,但忘记加上双引号导致 value=doctor name 而不是 value="doctor name"。谢谢!

标签: php mysql string select space


【解决方案1】:

Flash 代码审查:

  • mysql_* 已弃用。使用 MySQLi 或 PDO。
  • 您的代码对 SQL 注入开放
  • $doctornamerowvalue 在每次迭代时都会被覆盖
  • 你正在做的foreach 毫无意义。
  • 变量名称选择不当。

这里重构了:

// do these in a config file !!!
$db = new PDO('mysql:dbname=' . DB_NAME . ';host=localhost', DB_USER, DB_PASS);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); // if you want to use associative arrays

// here is the refactored code
$query = "SELECT name_of_doctor FROM `{$table}` WHERE department_no = :deptno";

$stmt = $db->prepare($query);
$stmt->execute(array(':deptno' => $_REQUEST['deptno']));
$doctors = $stmt->fetchAll();

foreach ($doctors as $doctor) {
     echo $doctor['name_of_doctor'] . '<br>';
}

与您的“错误”有关

  • 检查表结构和数据。该字段可能只包含姓氏,而另一个字段包含姓名。
  • 检查表格长度 - 可能它太小,所以字符串被截断。

【讨论】:

    【解决方案2】:

    试试这个:

    $sql = "your sql syntax";
    $result = mysql_query($sql);
    
    $array_of_things = array();
    
    while ($row = mysql_fetch_array($result)) {
        $array_of_things[] = $row['table_column_name'];
    }
    
    foreach($array_of_things as $val) {
        echo $val; 
    }
    

    【讨论】:

      【解决方案3】:

      用过这个:

      $doctname = mysql_query("SELECT name_of_doctor FROM {$table} WHERE department_no = '{$_REQUEST['deptno']}'");
      $doctnamerow = mysql_fetch_row($doctname);
      
      
      while ($raw = mysql_fetch_row($doctname)) {
      echo $raw['name_of_doctor'];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-12
        • 1970-01-01
        • 1970-01-01
        • 2016-01-24
        相关资源
        最近更新 更多