【问题标题】:How to display data from database MSSQL using foreach/for loop in SQLSRV PHP [duplicate]如何在 SQLSRV PHP 中使用 foreach/for 循环显示数据库 MSSQL 中的数据
【发布时间】:2020-04-01 20:45:03
【问题描述】:

我想在我的 db_table 的特定列中显示每一行。找到下面的代码:

$get_sname = sqlsrv_query($conn, "SELECT [columnName] FROM [db_table] inner join [db_table2] on [col_fkey] = [col_pkey] WHERE userName = '$user'",array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));
$rdr_sname = sqlsrv_fetch_array($get_sname, SQLSRV_FETCH_ASSOC);
$str = $rdr_sname['[columnName]'];
$rows = sqlsrv_num_rows($get_sname);
if($rows == false){
echo "\nerror\n";
}else{
$a = array($str);
for($i = 0;`$i < $rows;` $i++){
  foreach($a as $b){
     echo implode($a)."</br>";
  }
}

这个循环

$a = array($str);
for($i = 0;$i < $rows; $i++){
    foreach($a as $b){
       echo implode($a)."</br>";
    }
}

以这种格式从我的数据库返回行:

行名

行名

行名

我希望它返回的是这样的:

行名1

行名2

行名3

我非常感谢我能在这方面获得的所有帮助。谢谢。

【问题讨论】:

  • &lt;/br&gt; 无效。斜杠在“r”之后而不是在“b”之前,或者根本没有。
  • @FunkFortyNiner 在“r”之后或“b”之前都可以工作。
  • 哦,当然他们会工作,但它不会正确验证。

标签: php arrays sql-server for-loop sqlsrv


【解决方案1】:

使用此代码,

首先声明$count 变量。喜欢

$count = 0;
$a = array($str);
for($i = 0;$i < $rows; $i++){
    foreach($a as $b){
       echo implode($a).$count."</br>";
       $count++;
    }
}

【讨论】:

  • 我实际上期望输出显示我的数据库中的实际 [rowName]。不只是 [rowName1]、[rowName2]。我的期望是(例如 [John]、[Joe]、[Joseph],您提供的代码返回 [John1]、[John2]、[John3]。
【解决方案2】:

说明:

您需要在代码中进行一些更正:

  • 使用参数化语句来防止 SQL 注入。函数sqlsrv_query() 既做语句准备又做语句执行,可用于执行参数化查询。
  • 问题中的代码只获取结果集中的第一行,因为sqlsrv_fecth_array() 只执行一次。您需要在循环中执行sqlsrv_fetch_array() 以从所有行中获取数据。

示例:

你可以试试下面的代码:

<?php
// Statements
$sql = "
   SELECT [columnName] 
   FROM [db_table] 
   inner join [db_table2] on [col_fkey] = [col_pkey] 
   WHERE userName = ?
";
$get_sname = sqlsrv_query($conn, $sql, array($user), array("Scrollable" => SQLSRV_CURSOR_KEYSET));
if ($get_sname === false){
    echo print_r( sqlsrv_errors()); 
    echo "<br>";
    exit;
}

// Results
$rows = sqlsrv_num_rows($get_sname);
if ($rows === false) {
    echo "Error"."<br>";
} else {
    while ($rdr_sname = sqlsrv_fetch_array($get_sname, SQLSRV_FETCH_ASSOC)) {  
        echo $rdr_sname['columnName']."<br>";
    }
}

// End
sqlsrv_free_stmt($get_sname);  
?>

【讨论】:

  • 你是对的,我需要循环 sqlsrv_fetch_array。我找到了解决方案here
  • @Carl 很高兴您找到了解决问题的方法。请记住,没有必要使用两个循环来输出数据。谢谢。
【解决方案3】:

如果有人来到这里寻找答案,这里是完全正常工作的代码。

$get_store = sqlsrv_query($conn, "SELECT [columnName] FROM [db_table] inner join [db_table2] on [col_fKey] = [col_pKey] where userName = '{$user}'");
if($rows == false){
  echo "\nerror\n";
  }
else{
  $sname = array();
while($storename = sqlsrv_fetch_array($get_store, SQLSRV_FETCH_ASSOC))
  {
    $sname[] = $storename;
}
  foreach($sname as $storename){
    echo $storename['storeName'];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2016-06-24
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多