инструкция update ничего не делает с моей таблицей

#php #sql

#php #sql

Вопрос:

Я не получаю ошибок, и все мои операторы печати говорят мне, что я делаю хорошую работу, но мое поле под нужным столбцом остается неизменным.

что происходит (или, скорее, не происходит)?

 if ($current amp;amp; $new) {// the validation code is left out


        $sqlTekst = "UPDATE gebruikers SET pasW  = ". $_POST[nieuwPasw] ." WHERE gebruikersNr = ". $_POST[gebruikersNr];
        print 'huidig POST gebruikersNr = $_POST[gebruikersNr]';

// server koppeling
        $db = mysql_connect("localhost", "internet", "geheim");
// database koppeling
        mysql_select_db("site_met_aanmelden", $db)
                or die("Kan database gebruikers niet openen".mysql_error());        
        $resultaat = mysql_query($sqlTekst, $db);
        }   
  

Комментарии:

1. Как вы проверяете, что вы запускаете скрипт и что данные обновляются?

Ответ №1:

Вы «зафиксировали» изменения в базе данных?

Комментарии:

1. Все, что я сделал, это проверил мою таблицу в phpMyAdmin, выполнив запрос. Я действительно не знаю, что вы подразумеваете под «фиксацией»

2. Не похоже, что он установил для autocommit значение false.

3. MySQL автоматически фиксирует один запрос по умолчанию, если таблица создана с использованием движка InnoDB. Я не знаю ни одного человека, который изменил бы это поведение.

4. @Nemoden: mysql автоматически фиксирует все запросы, независимо от типа таблицы, если вы специально не отключите поведение или явно не запустите транзакцию.

Ответ №2:

добавьте обработку ошибок для фактического выполнения запроса,
позаботьтесь о возможных sql-инъекциях,
проверьте затронутые строки, чтобы увидеть, работает ли ваше WHERE-условие или нет,
отформатируйте и сделайте отступ в вашей инструкции sql, и вы получите немного более значимое сообщение об ошибке
распечатайте вашу инструкцию sql, чтобы вы могли проверить все параметры используйте $array[‘строка’] вместо $array [строка]

 if ($current amp;amp; $new) { // the validation code is left out
  $db = mysql_connect("localhost", "internet", "geheim") or die("connect failed. ".mysql_error());
  mysql_select_db("site_met_aanmelden", $db) or die("Kan database gebruikers niet openen".mysql_error());

  $sql_pasW = mysql_real_escape_string($_POST['nieuwPasw'], $db);
  $sql_gebruikersNr = mysql_real_escape_string($_POST['gebruikersNr'], $db);

  $sqlTekst = sprintf("
    UPDATE
      gebruikers
    SET
      pasW='%s'
    WHERE
      gebruikersNr ='%s'
    ", $sql_pasW, $sql_gebruikersNr
  );
  echo 'Debug '.__FILE__.__LINE__.': ', $sqlTekst, "n"; 
  $resultaat = mysql_query($sqlTekst, $db) or die('query failed: '.mysql_error());

  echo 'affected rows: ', mysql_affected_rows($db);
}
  

Комментарии:

1. Это выглядит плотно и полезно. Собираюсь проверить это завтра, сегодня у меня не было времени. Приветствия!

Ответ №3:

Я бы исправил это следующим образом:

 $sqlTekst = "UPDATE gebruikers SET pasW  = '". $_POST["nieuwPasw"] ."' WHERE gebruikersNr = ". $_POST["gebruikersNr"];
  

Предполагая, что ваш Nr ссылается на число, которое не нуждается в кавычках при выборе.

Ответ №4:

Я предполагаю, что по крайней мере ваше $_POST['nieuwPasw'] или $_POST['gebruikersNr'] является строкой, и вы не заключаете ее в ‘ в своем запросе.

Ваш рабочий запрос будет

 $sqlTekst = "UPDATE gebruikers SET pasW  = '". $_POST['nieuwPasw'] ."' WHERE gebruikersNr = '". $_POST['gebruikersNr']."'";
  

Просто замените строку.

вы также можете получить информацию, если в вашем запросе возникла ошибка, используя функцию mysql_error .

Добавить

 if (!$resultaat) {
echo mysql_error();
}
  

это привело бы к ошибке печати, возникшей во время запроса.

Я бы также предложил заключать ключи массивов в апострофы (двойное или единственное число — на самом деле не имеет значения).

Комментарии:

1. Да, но дело в том, что я не получаю никакой ошибки. И для ‘ Я сделал оба, и в обоих случаях моя таблица не обновляется

2. О, хорошо, почему я не подумал о том, что ошибка mysql может быть настолько широко применима. Имеет смысл. Достаточно интересно: ошибка говорит, что что-то не так рядом с » в строке 1. Опубликованный мной код начинается со строки 28….

3. $_POST[‘gebruikersNr’] не установлен? 🙂 просто сделайте print $sqlTekst , вы, вероятно, увидите это. И не забудьте поделиться здесь, если ваша проблема остается нерешенной.

4. $_POST[$’gebruikersNr’] определенно установлен 🙂 И да, я подтвердил это, выполнив тот же print $sqlTekst

5. И забыл поделиться print $sqlTekst результатами 😉

Ответ №5:

Попробуйте вот так:

  $sqlTekst = "UPDATE gebruikers SET pasW  = '". $_POST[nieuwPasw] ."' WHERE gebruikersNr = '". $_POST[gebruikersNr]."'";