【问题标题】:Trying to echo a single row with multiple columns from database尝试从数据库中回显具有多列的单行
【发布时间】:2014-02-28 20:10:56
【问题描述】:

我处于用户进程的末尾,我似乎无法在包含 10 列的单行中回显所有数据。这是我的代码:

$state = $_POST['state'];

$city = $_POST['city'];

$jobTitle = $_POST['jobTitle'];



try {
$db = new PDO("mysql:host=localhost;dbname=TeacherData;port=8889","censored","censored");
}   catch (Exception $e) {
echo "Could not connect to database.";
exit;
}




$sql = "SELECT
TOT_EMP, 
H_MEAN, 
JOBS_1000,
A_MEAN,
H_PCT10,
H_MEDIAN,
H_PCT90,
A_PCT10,
A_MEDIAN,
A_PCT90
FROM teacherdataall 
WHERE PRIM_STATE='" . $state . "' 
AND AREA_NAME='" . $city . "' 
AND OCC_TITLE='" . $jobTitle . "'";

$result = $db->query($sql);

if($result !== false) 
{
    $cols = $result->columnCount();           // Number of returned columns

    echo 'Number of returned columns: '. $cols. '<br />';

    foreach($result as $row) 
        {
          echo $row['TOT_EMP'] . ' - ' . $row['H_MEAN'] . ' - '. $row['JOBS_1000'] . ' - ' . $row['A_MEAN'] . ' - '. $row['H_PCT10'] . ' - ' . $row['H_MEDIAN'] . ' - '. $row['H_PCT90'] . $row['A_PCT10'] . ' - ' . $row['A_MEDIAN'] . ' - ' . $row['A_PCT90'] . '<br />';
        }
}

无论打印/回显功能如何变化,我都无法让数据出现!只有一排!!任何帮助将不胜感激。

这是第 3 页的代码:

<?php
$state = $_POST['state'];

$city = $_POST['city'];

try {
$db = new PDO("mysql:host=localhost;dbname=TeacherData;port=8889","root","root");
}       catch (Exception $e) {
    echo "Could not connect to database.";
    exit;
}

$stmt = $db->prepare("SELECT DISTINCT OCC_TITLE FROM teacherdataall WHERE PRIM_STATE='" . $state . "' AND AREA_NAME='" . $city . "';");


echo "<br>";
echo "<form action='fourth_page.php' method='post'>";
echo "State: ";
echo "<select name='state'><option value=$state>$state</option>";
echo "</select>";
echo "City: ";
echo "<select name='city'><option value=$city>$city</option>";
echo "</select>";
echo "<select name='jobTitle'><option value=''>-- Job Title --</option>";

if ($stmt->execute()) {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
    {
        echo '<option value="' . $row['OCC_TITLE'] . '">' . $row['OCC_TITLE'] . '</option>';
        echo "<hr>";
    }
echo "</select>";
echo "<button type='submit'>Next</button>";
}
    echo "</form>"; 



?>

完成编辑:由于没有在 html value=$city 周围添加单引号,我从 $_POST 传递了一个错误的值。现在一切都解决了!谢谢@Ray!

【问题讨论】:

  • 您的查询取决于表单中的内容。这一切是如何运作的?
  • 你的if声明成功了吗?
  • @halfer 如果语句部分成功,我得到正确的列数。
  • @Fred-ii- 表单工作正常,前 3 页运行良好。问题是第 4 页(这一页)没有与前三页相同的
  • 我认为Ray下面的回答可能是你需要的。

标签: php mysql


【解决方案1】:

colCount() 告诉您请求的列数,而不是您返回的结果。您可能想要rowCount(),因为您已经知道在查询中明确设置了多少列。在您的情况下,您的选择语句有:TOT_EMP、H_MEAN、JOBS_1000、A_MEAN、H_PCT10、H_MEDIAN、H_PCT90、A_PCT10、A_MEDIAN、A_PCT90。这意味着您总是会为您在 SQL 查询中指定的数字列返回数字 10。

话虽如此,我怀疑您的查询运行成功,但返回一组空结果(没有匹配项)。尝试手动运行您在$sql 中构建的查询。

如果要将结果视为关联数组,还需要从结果中获取行:

 $rowCount = $result->rowCount(); 

 echo 'Number of returned results: '. $rowCount. '<br />'; 

 $rows = $result->fetchAll(PDO::FETCH_ASSOC);


  foreach($rows as $row) 
  {
       //... rest here

我的最后一点是你不应该直接在查询中使用 $_POST 数组数据,除非你真的想要 SQL 注入。使用准备好的语句并绑定、绑定、绑定你的幸福之路:

$sql = "SELECT TOT_EMP, H_MEAN, JOBS_1000,A_MEAN,H_PCT10, H_MEDIAN,H_PCT90, A_PCT10,
        A_MEDIAN, A_PCT90 FROM teacherdataall  WHERE PRIM_STATE=:state AND    
       AREA_NAME=:area  AND OCC_TITLE=:jobTitle";


 $area = "$city, $state";
 $statement = $db->prepare($sql);
 $statement->bindValue(":state", $state);
 $statement->bindValue(":area", $area);
 $statement->bindValue(":jobTitle", $jobTitle);

 $result = $statement->execute();

【讨论】:

    【解决方案2】:

    我目前正在寻找这个,很难做到上面最喜欢的选项。我发现有人发布了一个类似的问题,它对我来说是获取 sql 的下拉列表。

    我希望这可以帮助任何寻找略有不同答案的人。

    This is the code i used and on the first try my problem was fixed.

    【讨论】:

      猜你喜欢
      • 2015-12-06
      • 2017-12-18
      • 2015-08-21
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 2020-02-16
      相关资源
      最近更新 更多