0

所以我有这个简单的 do_signup.php 部分代码:

<?php
$conn=oci_connect('system', 'user');
if(!$conn){
echo 'Can not connect';
}

$uname=$_POST['username'];
$pass=$_POST['password'];
$pstmt1="select * from admin where username='$uname'";
$stdi1=oci_parse($conn, $pstmt1);
oci_execute($stdi1);
oci_fetch($stdi1);
$numrow=oci_num_rows($stdi1);

if($numrow==0){
    $pstmt2="insert into admin(username,password) values('$uname', '$pass')";
    $stdi2=oci_parse($conn, $pstmt2);
    oci_execute($stdi2);

    oci_close($conn);
    header('Location: signup_success.php');
}else{
    oci_close($conn);
    header('Location: signup_fail.php');
}

?>

当我的表为空时,我总是被重定向到 signup_fail.php。再说一遍,为什么?

4

3 回答 3

3
$stdi1=oci_parse($conn, $pstmt1);

您的变量名称是:$stdi1

然后你执行:$stdi

替换$stdi$stdi1_oci_execute($stdi);

编辑:查看 php 手册:http: //php.net/manual/fr/function.oci-num-rows.php

您必须获取结果才能使用该 oci_num_rows函数返回获取的行(选择),而不是像 DML 查询那样返回受影响的行。

喜欢:

oci_execute($stdi1); 
oci_fetch($stdi1);
$numrow=oci_num_rows($stdi1);
于 2013-10-04T10:24:01.333 回答
1

第一个错误:

$pstmt1="select * from admin where username='$uname'";//remove extra semicolon

第二个错误:

$pstmt2="insert into admin(username,password) values('$uname', '$pass')";//删除多余的分号并以正确的方式编写插入语法

于 2013-10-04T10:24:56.357 回答
0

You can try the following

oci_define_by_name($stmt, 'NUMBER_OF_ROWS', $number_of_rows);
oci_execute($stmt);
oci_fetch($stmt);
echo $number_of_rows;
于 2013-10-04T11:05:37.427 回答