我需要一些帮助来查询来自Oracle数据库的数据。在这个数据库中,我有一个Employee表,其中包含一些信息,包括azip代码,id,fname和lname字段。
我的查询如下:
$query = 'SELECT * FROM Employee
WHERE Employee.lname=='.$fname;
我正在从HTML中生成的输入文本框中读取信息。我想读取输入,并检索具有在输入框中输入的名称的员工的信息。
它似乎不喜欢我的查询,因为它没有返回任何结果。这里有什么帮助吗?
注意:忽略与登录数据库关联的任何连接字符串。出于安全考虑,这些已被删除。登录确实有效,因为我已经成功地执行了一般查询。
<!DOCTYPE HTML>
<html>
<head>
<style>
</style>
</head>
<body>
<?php
$nameErr = "";
$name = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Name is required";
}
else {
$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Only letters and white space allowed";
}
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<h1>Assignment 4</h1>
<p><span class="error">* required field.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name: <input type="text" name="name" value="<?php echo $name;?>">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
<?phpasdf
echo "<h1>Results:</h1>";
echo $name;
echo "<br>";
?>
<?php
// The connection string is loooooooong. It's easiest to copy/paste this line. Remember to replace 'username' and 'password'!
$conn = oci_connect('login', 'password', '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=host)(Port=xxxx)))(CONNECT_DATA=(SID=cs)))');
//put your query in here
$query = 'SELECT * FROM Employee
WHERE Employee.lname=='.$fname;
$stid = oci_parse($conn,$query);
oci_execute($stid,OCI_DEFAULT);
//iterate through each row
while ($row = oci_fetch_array($stid,OCI_ASSOC))
{
//iterate through each item in the row and echo it
foreach ($row as $item)
{
echo $item;
}
echo '<br/>';
}
oci_free_statement($stid);
oci_close($conn);
?>
</body>
</html>
答案 0 :(得分:2)
您的查询的这一部分
WHERE Employee.lname=='.$fname;
它应该使用一个等号并将$name
变量包装在引号中,同时为包装器本身使用双引号:
"SELECT * FROM Employee WHERE Employee.lname='$name'";
因为它是一个字符串而不是整数。
Nota:$fname
变量不存在,应该是$name
。
按照:
$name = test_input($_POST["name"]);
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:只应在暂存时进行显示错误,而不是生产。
另外,检查查询中的错误会引发语法错误。