Если заявление не работает - PullRequest
0 голосов
/ 26 марта 2011

В моем коде есть 2 sql запроса, второй из которых обернут вокруг оператора if, который должен выполняться только при наличии определенного значения post.

Но я все еще получаю следующее сообщение об ошибке:

SQLSTATE [23000]: ограничение целостности нарушение: 1452 Не удается добавить или обновить дочерняя строка: ограничение внешнего ключа не удается (database1. table2, ОГРАНИЧЕНИЕ fk_referals_users1 КЛЮЧЕВОЙ КЛЮЧ (users_id) users (id) ВКЛ УДАЛИТЬ НЕТ ДЕЙСТВИЙ ВКЛ ОБНОВЛЕНИЕ НЕТ ДЕЙСТВИЙ)

Ясно, что если бы оператор не работал, если бы он был, он не получил бы второй запрос 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 ]

1 голос
/ 26 марта 2011

null и "" - это разные значения, поэтому, если оно равно null, оно не будет равно "", и если IF пройдет trueЯ рекомендую это if ( $_POST['referer'] && strlen($_POST['referer']) > 0 ).Это проверит, является ли оно нулевым или нет (если оно не установлено, оно является нулевым) и существует ли строка длиной более 0

1 голос
/ 26 марта 2011

Одно из ваших условий if становится истинным.

Разбейте ваш составной оператор if на 3 вложенных ifs и добавьте эхо на каждом уровне, чтобы увидеть, какой из них не работает .

0 голосов
/ 26 марта 2011

Оператор IF проверяет, установлено ли определенное значение POST.Ваше ограничение внешнего ключа проверяет, присутствует ли значение в поле POST в таблице users.Эти два условия не связаны.Поле POST может быть установлено со значением, которого нет в таблице users.Вы должны проверить, присутствует ли значение в таблице пользователей (возможно, COUNT?), Прежде чем пытаться вставить (это, конечно, зависит от ваших настроек)

Кроме того, вы должны использовать empty() для IFусловие как isset() переведет ваше условие в ИСТИНА, даже если значение будет пустым.Лучше использовать

if (!empty($_POST['referer'])) {
   //your code here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...