Form Submit Success, но нет данных в базе данных MySQL [duplicate]

PCRE не поддерживает синтаксис \uXXXX. Вместо этого используйте \x{XXXX}. См. здесь .

Ваш диапазон \u2e80-\u9fff также эквивалентен

\p{InCJK_Radicals_Supplement}\p{InKangxi_Radicals}\p{InIdeographic_Description_Characters}\p{InCJK_Symbols_and_Punctuation}\p{InHiragana}\p{InKatakana}\p{InBopomofo}\p{InHangul_Compatibility_Jamo}\p{InKanbun}\p{InBopomofo_Extended}\p{InKatakana_Phonetic_Extensions}\p{InEnclosed_CJK_Letters_and_Months}\p{InCJK_Compatibility}\p{InCJK_Unified_Ideographs_Extension_A}\p{InYijing_Hexagram_Symbols}\p{InCJK_Unified_Ideographs}

Не забудьте добавить u (/regex here/u), если вы имеете дело с UTF-8. Если вы имеете дело с другой многобайтовой кодировкой, вы должны сначала преобразовать в UTF-8.

-2
задан Haywood 24 December 2014 в 02:26
поделиться

3 ответа

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

Если вы установили столбец SERVER_NAME в UNIQUE, тогда вам не нужно проверять наличие имени сервера, прежде чем выполнять свой INSERT, поскольку MySQL сделает это за вас. Используйте INSERT IGNORE объявление, чтобы проверить количество затронутых строк после выполнения запроса, чтобы выяснить, работает ли он:

//Create connection to database using mysqli
$conn = new mysqli($dbhost, $dbuser, $dbpass, $db);

//Set variables according to user input on previous form
$Server_Name = $_POST['Server_Name'];

//Define the INSERT statement with IGNORE keyword
    $stmt = "INSERT IGNORE INTO dcr_master (Server_Name, Description,..., ... , ... )";
    if ($conn->query($stmt) === false) {
        die("Database error:".$conn->error);
    }

// Check for success
    if ($conn->affected_rows == 0) {
        print "<br>Error! <p></p>";
        echo "" . $Server_Name . " already exists in the DCR";
        print "<p></p>Please check the Server Name and try again";
    } else {

//Success and return new id
        echo "<br><p></p>Record Added!<p></p>";
        echo "New id: " . $conn->insert_id;
    }

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

Я рекомендую вам использовать стиль ООП или процедурный стиль для mysqli_*(), но не смешивать их. Используются обычные предупреждения об инъекции SQL.

3
ответ дан user 16 August 2018 в 04:11
поделиться

Используйте mysqli_num_rows

$row_cnt = $dupresult->num_rows;

if ($row_cnt > 0) {

   echo "There is a matching record";

}else {

   //insert into table

}
1
ответ дан fortune 16 August 2018 в 04:11
поделиться
  • 1
    PHP сообщает об ошибке, когда я добавил этот код. Примечание. Пытается получить свойство не-объекта в строке 48 (строка, содержащая $ row_cnt = $ dupresult- & gt; num_rows;) – Haywood 23 December 2014 в 20:02
  • 2
    Это может произойти, если запрос выбора не выполняется. Вы получаете false вместо [MySQLi resource]. Вероятно, вы захотите выбросить Exception всякий раз, когда запрос завершится с ошибкой. – Halcyon 23 December 2014 в 22:10

Это утверждение:

if($dupresult = 1)

всегда будет возвращено 1. Сначала вы должны получить первый результат запроса (если он есть):

$row=$dupresult->fetch_array(MYSQLI_NUM);

, а затем сравните результат против NULL:

if(!$row)
0
ответ дан kos 16 August 2018 в 04:11
поделиться
  • 1
    $dupresult - ресурс MySQLi, при нажатии на boolean он всегда будет true. – Halcyon 23 December 2014 в 19:35
  • 2
    @Halcyon Если это не NULL, где когда-то литой будет всегда false. Пожалуйста, удалите ваш downvote. – kos 23 December 2014 в 19:39
  • 3
    @Halcyon И так как вы даже не нашли времени, чтобы признать свои собственные ошибки, в следующий раз не обходите нисходящие случайные сообщения, если вы даже не знаете, о чем говорите. – kos 23 December 2014 в 20:05
  • 4
    @Halcyon Извините, я заглянул в это снова и узнал, что это я ошибаюсь. И когда я впервые написал ответ, но все же, когда я проверил его снова после его понижения, я убедился, что $dupresult был массивом, возвращаемым чем-то вроде $result->fetch_assoc(). И я знаю, что вы явно указали, что это был ресурс MySQLi, но, к сожалению, не включил свет. Мои извинения – kos 23 December 2014 в 21:39
  • 5
    Прости. Однако я не тот, кто дал вам ниспровержение. Имейте upvote: D – Halcyon 23 December 2014 в 22:23
Другие вопросы по тегам:

Похожие вопросы: