如果声明不起作用

时间:2011-03-26 08:11:44

标签: php mysql if-statement pdo

我的代码中有2个sql查询,其中第二个查询包含if语句,只有在存在某个post值时才会执行。

但我仍然收到以下错误消息:

  

SQLSTATE [23000]:完整性约束   违规:1452无法添加或更新   子行:外键约束   失败(database1table2,   约束fk_referals_users1   FOREIGN KEY(users_id)参考文献   usersid)ON DELETE NO ACTION ON   更新无行动)

显然if语句不起作用,如果是,它就不会进入第二个sql查询。

以下是脚本的问题部分:

$STH = $DBH -> prepare( "insert into database1.table1 (display_name, email, password) values ( :display_name, :email, :password )" );

$STH -> bindParam( ':display_name', $_POST['display_name'], PDO::PARAM_STR, 100 );
$STH -> bindParam( ':email', $_POST['email'], PDO::PARAM_STR, 100 );
$STH -> bindParam( ':password', $_POST['password'], PDO::PARAM_STR, 100 );

$STH -> execute();

if( isset( $_POST['referer'] ) or ( $_POST['referer'] != null ) or ( $_POST['referer'] != "" ) ) {
    $STH = $DBH -> prepare( "insert into database1.table2 ( username, status, users_id ) values ( :username, :status, :users_id )" );

    $strStatus = 1;

    $STH -> bindParam( ':username', $_POST['display_name'], PDO::PARAM_STR, 100 );
    $STH -> bindParam( ':status', $strStatus, PDO::PARAM_INT, 1 );
    $STH -> bindParam( ':users_id', $_POST['referer'], PDO::PARAM_INT, 1 );

    $STH -> execute();
}

3 个答案:

答案 0 :(得分:1)

您的一个if条件正在解析为true。

将复合if语句分解为3个嵌套ifs,并在每个级别添加一个echo以查看哪个失败

答案 1 :(得分:1)

null""是不同的值,因此如果它等于null,它将不等于"",并且IF将传递为真。我推荐这个if ( $_POST['referer'] && strlen($_POST['referer']) > 0 )。这将检查它是否为null(如果未设置为null)并且是否存在长度大于0的字符串

答案 2 :(得分:0)

IF语句检查是否设置了某个POST值。您的外键约束检查POST字段中的值是否存在于users表中。这两个条件无关。可以使用users表中不存在的值设置POST字段。您应该在尝试插入之前检查用户表中是否存在该值(可能是COUNT吗?)(当然这取决于您的设置)

此外,您应该使用empty()作为IF条件,因为isset()即使值为空,也会将您的条件跳至TRUE。最好使用

if (!empty($_POST['referer'])) {
   //your code here
}