php
  • mysql
  • indexing
  • mysqli
  • 2015-09-26 3 views 0 likes 
    0

    Вот код, который я использовалУникальный идентификатор для каждой строки в Mysqli

    HTML:

    <form action = 'insert.php' method='POST'> 
    <input type = "text" name = "name"> 
    <input type = "submit" name = "submit"> 
    </form> 
    

    PHP:

    <?php 
    $servername='localhost'; 
    $username='noob'; 
    $password='password'; 
        $conn = mysqli_connect($servername, $username, $password); 
        if (!$conn) 
         die("Connection failed: " . mysqli_connect_error()); 
    $a=$_POST['name']; 
    mysqli_query("INSERT INTO table1 (name) VALUES ('$a')"); 
    ?> 
    

    Прямо сейчас, код выше вставляет имя в таблицу, называемую таблицей 1. Теперь мой вопрос: скажем, я ввожу много имен в таблицу, но я хочу, чтобы каждое имя имело уникальный 6 символов/цифр. Как я могу изменить этот код? Например, после 3-х вставок, таблица должна выглядеть следующим образом:

    [table 1] 
    name    unique_id 
    NAME1    994323 
    NAME2    832344 
    NAME3    332123 
    

    Каждое значение unique_id должно быть уникальным. Есть ли эффективный способ сделать это?

    +1

    , пожалуйста, научитесь правильно отформатировать свой вопрос. – 0x13a

    +2

    Создайте уникальный ключ в mysql для этого столбца – mcklayin

    +1

    Если вы в порядке с последовательным 'unique_id', вы может сделать это столбцом автоматического увеличения и установить начальное значение на '100000', первое число с 6 цифрами. См. [Этот вопрос] (http://stackoverflow.com/questions/3470246/mysql-how-do-i-start-auto-increment-from-a-specific-point) о том, как это сделать. Несмотря на то, что вы решили создать свой уникальный идентификатор, ваша таблица будет ограничена 899999 записями. Может быть, это может быть проблемой. –

    ответ

    0

    Для генерации случайных кода можно использовать RAND() в Чтобы получить случайное целое число N в диапазоне с < = N < б, просто использовать выражение этаж (а + RAND() * (Ь - а)), как описано в mysql docs

    Ваш запрос уязвим для SQL-инъекции, исправьте его с помощью mysqli_real_escape_string!

    $name = mysqli_real_escape_string($_POST['name']); 
    $result = mysqli_query("SELECT FLOOR(100000 + RAND() * 990000) AS random_num 
        FROM table1 
        WHERE random_num NOT IN (SELECT table1.code FROM table1) 
        LIMIT 1"); 
    $row = mysqli_fetch_row($result); 
    $code = $row[0]; 
    
    mysqli_query("INSERT INTO table1 (name, code) VALUES ('$name', '$code')"); 
    

    Это рабочий запрос для генерации случайных цифр: http://sqlfiddle.com/#!9/2acd3/1

    EDIT:

    Лично я предпочитаю PDO вместо Mysqli функций, во всяком случае,

    кто-то спросил мой почему I предложите PDO вместо функции MySQLi.Это путь, который я предложил, вы можете использовать все, что вы хотите

    • Поддержка База

      • PDO имеет 12 различных драйверов
      • MySQLi имеет только драйвер Mysql
    • API

      • PDO: только ООП (избегая плохая практика)
      • MySQLi OOP или Процедурный
    • Именованные параметры

      • PDO: да
      • MySQLi нет
    • Подготовленные заявления (клиентская сторона)

      • PDO: да
      • MySQLi: нет
    +0

    Есть ли какая-либо прямая документация, которую вы можете предоставить о том, почему вы __suggest__ PDO над MySQLi, кроме вашего собственного предпочтительного метода? – Jesse

    +0

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

    +0

    Это один пример кода итерации – 0x13a

    0

    Ну вы можете использовать временную метку, которая является уникальным, но его не 6 цифр, а его больше, чем .Для эту работу, вы должны использовать VARCHAR, как тип данных столбца и использовать функцию php time(). Это приведет к генерации уникальной цифры. Для этого увеличьте длину столбца до ок. 15.

    +0

    Как вы сказали, это не 6-значное значение. –

    +0

    Да, это не единственный, но уникальный. Просто нужно увеличить длину столбца. Это пример 1443298042 – Exception

    Смежные вопросы