积垢';使用PHP和Oracle

积垢';使用PHP和Oracle,php,html,sql,database,oracle,Php,Html,Sql,Database,Oracle,我正在尝试创建一个表单来更新存储在Oracle数据库中的用户信息,更新没有正确进行,我看不出有问题,因为我让表单打印出提交给Oracle的SQL,并且所有这些都已签出 以下是形成连接的php: <?php $sql="select * from Members where MemberID = ".$_GET["memberid"]; $conn = oci_connect("user","pass", "conn"); $stmt = oci_parse($conn, $sql); oc

我正在尝试创建一个表单来更新存储在Oracle数据库中的用户信息,更新没有正确进行,我看不出有问题,因为我让表单打印出提交给Oracle的SQL,并且所有这些都已签出

以下是形成连接的php:

<?php
$sql="select * from Members where MemberID = ".$_GET["memberid"];
$conn = oci_connect("user","pass", "conn");
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);
$row=oci_fetch_row($stmt);
oci_free_statement($stmt);
oci_close($conn);
?>

以下是表格,其中有一个或两个表格输入示例:

    <div class="topwrapper"><img src="logo.png" alt="Peak Park Sailing Club"></div>
<form name="form1" method="post" action="editmemhandler.php">
 <input name="MemberID" type=hidden id="MemberID" value=<?php print $row[0];?>>
 <table class="infotable">
      <tr>
      <td><strong>Member ID</strong></td>
      <td><input name="memberid" type="text" id="memberid" value=<?php print $row[0];?>></td>
    </tr>
    <tr>
      <td><strong>First Name</strong></td>
      <td><input name="firstname" type="text" id="firstname" value=<?php print $row[1];?>></td>
    </tr>

>
名字

查询中的qoutes中没有包含$memberid变量

<代码>其中memberid='$memberid';“

试试这个:

$conn = oci_connect("user","pass", "conn");

$sql = "UPDATE Members SET firstname=:firstname, lastname=:lastname, dob=:dob, membertype=:membertype, groupid=:groupid, houseno=:houseno, street=:street, town=:town, county=:county, postcode=:postcode where memberid=:memberid;";
$stmt = oci_parse($conn, $update);
oci_bind_by_name($stmt, ':firstname', $firstname);
oci_bind_by_name($stmt, ':lastname', $lastname);
oci_bind_by_name($stmt, ':dob', $dob);
oci_bind_by_name($stmt, ':membertype', $membertype);
oci_bind_by_name($stmt, ':groupid', $groupid);
oci_bind_by_name($stmt, ':houseno', $houseno);
oci_bind_by_name($stmt, ':street', $street);
oci_bind_by_name($stmt, ':county', $county);
oci_bind_by_name($stmt, ':postcode', $postcode);
oci_bind_by_name($stmt, ':memberid', $memberid);

$result = oci_execute($stmt, OCI_DEFAULT);
if (!$result) {
  echo oci_error();   
}

oci_commit($conn);

这种工作方式也会减少您的sql注入量。我是在脑子里写的。我没有机会测试它,因为我没有oracle DB。但是试试看。

成员ID是一个数字,这有关系吗?@BobP没有,它没有。它会给出错误或什么吗?或者它什么都不做?它什么都不做,但是,如果我将SQL结果复制并粘贴到oracle上的GUI中,更新就会运行。您是否在oracle中使用双引号创建了表?因为如果是,每次引用时都需要保留引号。@Mihai否,表不是使用双引号创建的。oci_是否执行($stmt);返回true或false?我从中得到了一个true返回,但数据库中的数据没有更新。这可能是因为字符串不在引号中吗?这种方式更适合语句方式..这里的''无关紧要,因为当您绑定参数时,oci将为您执行此操作…我编辑了我的答案,您现在可以添加什么,然后看看有什么错误是你得到的..bool(true)是唯一的输出吗?这是不可能的..如果没有找到错误,oci_error返回false,或者一个有错误的数组..我也做了编辑..我忘了用关闭查询;最后.我的错,我留下了$help=oci_execute($stmt);var_Dump($help);代码。
$conn = oci_connect("user","pass", "conn");

$sql = "UPDATE Members SET firstname=:firstname, lastname=:lastname, dob=:dob, membertype=:membertype, groupid=:groupid, houseno=:houseno, street=:street, town=:town, county=:county, postcode=:postcode where memberid=:memberid;";
$stmt = oci_parse($conn, $update);
oci_bind_by_name($stmt, ':firstname', $firstname);
oci_bind_by_name($stmt, ':lastname', $lastname);
oci_bind_by_name($stmt, ':dob', $dob);
oci_bind_by_name($stmt, ':membertype', $membertype);
oci_bind_by_name($stmt, ':groupid', $groupid);
oci_bind_by_name($stmt, ':houseno', $houseno);
oci_bind_by_name($stmt, ':street', $street);
oci_bind_by_name($stmt, ':county', $county);
oci_bind_by_name($stmt, ':postcode', $postcode);
oci_bind_by_name($stmt, ':memberid', $memberid);

$result = oci_execute($stmt, OCI_DEFAULT);
if (!$result) {
  echo oci_error();   
}

oci_commit($conn);