Условно подготовленное заявление не переключается - PullRequest
0 голосов
/ 16 апреля 2009

У меня есть следующий код PHP, который предназначен для вставки данных в случае, если поле имени пользователя пустое для данного имени пользователя, или обновления данных, если имя пользователя существует. В данный момент вставка ранее работала нормально, но она никогда не переключалась бы на условие обновления.

Теперь, однако, предложение insert не может распознать мою тестовую переменную без видимой причины. Я получаю следующие ошибки:

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given

и

Notice: Undefined variable: checkUsername

, которые совсем недавно.

if($cmd=="submitinfo"){

$usernameQuery = "select username from USERS where username = $username";

$xblah = $con->query($usernameQuery);
  while ($row = mysqli_fetch_assoc($xblah))
  {
    $checkUsername = $row['username'];

  }

if ($checkUsername == null) {

$userQuery = "INSERT INTO USERS VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
if ($userInfo = $con->prepare($userQuery)) {
    $userInfo->bind_param("ssssssssssssssssssss", $username, $firstname, $lastname, $flaggedauctions, $lastauction, $street1, $city1, $postcode1, $street2, $city2, $postcode2, $phone, $mobilephone, $fax, $email, $website, $bank, $banknumber, $accountnumber, $comments);
    $userInfo->execute();
    $userInfo->close();
    echo "true";
} else {
echo "false";
}
print_r($con->error);
}

else if ($checkUsername == $username) {

$userQuery = "UPDATE USERS SET firstname = ?, lastname = ?, flaggedauctions = ?, lastauction = ?, street1 = ?, city1 = ?, postcode1 = ?, street2 = ?, city2 = ?, postcode2 = ?, phone = ?, mobilephone = ?, fax = ?, email = ?, website = ?, bank = ?, banknumber = ?, accoutnumber = ? WHERE username = ?";
if ($userInfo = $con->prepare($userQuery)) {
    $userInfo->bind_param("sssssssssssssssssss", $firstname, $lastname, $flaggedauctions, $lastauction, $street1, $city1, $postcode1, $street2, $city2, $postcode2, $phone, $mobilephone, $fax, $email, $website, $bank, $banknumber, $accountnumber, $username);
    $userInfo->execute();
    $userInfo->close();
    echo "true";
} else {
echo "false";
}
print_r($con->error);
}
}

Какой предпочтительный способ сделать обновление или вставку в зависимости от содержимого $ username, сопоставленного с полем username?

Ответы [ 2 ]

1 голос
/ 16 апреля 2009
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given

Это ваше сообщение об ошибке? Я думаю, что ваша проблема в этой строке:

$xblah = $con->query($usernameQuery);

Сделайте var_dump на $ xblah. Я подозреваю, что ваш запрос не выполняется. Возможно, потому что вы не получили $username с вашего ввода. И ради любви к корню обязательно избежите этого! mysql_real_escape_string() будет делать то, что вы хотите.

0 голосов
/ 16 апреля 2009

Если вы используете MySQL и имя пользователя уникально, вы можете использовать этот удобный SQL:

INSERT INTO users (?, ?, ...) ON
DUPLICATE KEY UPDATE firstname=?,
lastname=?, ...)

См. http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html для полной документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...