【问题标题】:how to stop execution and echo user a message when no rows return没有行返回时如何停止执行并回显用户消息
【发布时间】:2016-08-12 12:43:24
【问题描述】:

我有两个php页面第一个index.php如下

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Site Title</title>
</head>

<body align="right">

<h4 align="right">Site Title<br>Subtitle</h4>

<form action="acc_data.php" method="post">
<input type="text" name="ACCNUM"> Account Number</br>
<input type="submit" value="Search">

</form>


</body>

</html>

acc_data.php如下

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Site Title</title>
</head>

<?php

$conn = oci_connect('admin', 'admin', 'localhost/JDT','AL32UTF8');
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

// Prepare the statement
$sqlstr = 'SELECT CUSTOMER_ID,CUST_NAME,PHONE1 FROM customers where CUSTOMER_ID=:ACCNUM';

$stid = oci_parse($conn,$sqlstr);
$ACCNUM = $_POST['ACCNUM'];
oci_bind_by_name($stid, ':ACCNUM', $ACCNUM);
oci_execute($stid);


// Fetch the results of the query
print "<table style=width:75% align=center border=1>
        <tr><th>Account Number</th>
        <th>Name</th>
        <th>Phone</th></tr>";

        while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) 
        {
            print "<tr>";
            foreach ($row as $item) 
            {
                print "<td align=center>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;") . "</td>";
            }
            print "</tr>\n";
        }
print "</table>\n";

oci_free_statement($stid);
oci_close($conn);

?>

</body>
</html>

第一页的用户将输入其数据并将值传递给另一个php页面以在服务器上处理并返回结果

问题1: 我应该做些什么安全改进?

问题2: 如果没有行返回如何停止执行并回显用户消息?

【问题讨论】:

  • a:对于 q2:使用条件语句。 if(condition is met){ do something } else{...}。简而言之。
  • @Fred-ii- 好的,但是如何知道语句是否返回了某些东西我找到了 oci_num_rows 但它不起作用,因为我搜索它不返回获取的行数
  • 查看这些问答 stackoverflow.com/q/17782007stackoverflow.com/q/18957148stackoverflow.com/q/23425684 应该可以让您检查是否找到了行。

标签: php oracle


【解决方案1】:

PHP Oracle API 不提供仅返回结果集中行数的函数。我能看到告诉选择了多少行的唯一方法是在打印任何内容之前获取所有行。所以使用oci_fetch_all 一次获取所有行。

$count = oci_fetch_all($stid, $rows, null, null, OCI_FETCHSTATEMENT_BY_ROW + OCI_ASSOC);
if ($count == 0) {
    Print "No results found";
} else {
    print "<table style=width:75% align=center border=1>
            <tr><th>Account Number</th>
            <th>Name</th>
            <th>Phone</th></tr>";

    foreach ($rows as $row) {
        ...
    }
    print "</table>\n";
}

【讨论】:

  • 它总是返回 No results found 即使有记录它的显示 No results found and don't show records
  • 糟糕,省略了一些参数。立即尝试。
  • 在没有找到结果时返回消息,但在应该找到没有消息的记录时返回null,这意味着它退出了if语句但它丢失了结果?
  • 我不明白为什么。我就像文档中的示例一样做到了。我没有 Oracle,所以无法测试。
猜你喜欢
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 2014-01-01
  • 1970-01-01
  • 2023-03-14
  • 2021-09-11
相关资源
最近更新 更多