2016-09-19 2 views
0

Когда я вставляя с помощью этого кода вставить два и я ДАННЫЕ downt знаю, как это исправитьКогда я вставки данных в MySQL это вставить два ДАННЫЕ, и я не знаю, почему

$sql = "SELECT Version_id FROM versions ORDER BY Version_id DESC LIMIT 1;"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     $lastVersion =$row["Version_id"]; 
    } 
} 
echo($lastVersion); 
$lastVersion++; 
$sql = "INSERT INTO versions (version) 
VALUES ('v$lastVersion')"; 
if (mysqli_query($conn, $sql)) { 
    echo "New record created successfully"; 
} else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
} 
+0

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

+0

это v $ lastVersion или $ lastVersion –

+0

укажите немного больше того, с чем вы работаете. Команды 'SELECT' и' INSERT' не совпадают. – RST

ответ

1

Хотя я не совсем понимаете, что вы имеете в виду под «двумя данными», я вижу несколько проблем с вашим кодом.

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

Большинство из них можно устранить, просто изменив поле version_id на AUTO_INCREMENT. Это автоматически даст новой записи следующий доступный идентификатор в наборе, точно так же, как вы пытаетесь сделать. Тогда вы можете получить этот идентификатор с помощью «lastInsertId()»

Это сделает весь код в ваш пост superflous, и требуют только вы делаете что-то вроде этого, когда на самом деле вставки данных:

$sql = "INSERT INTO `version`(`setting`, `date`) VALUES (:setting, :date)"; 
$stmt = $db->prepare ($sql); 
$res = $stmt->execute ($data); 
$newID = $db->lastInsertId(); 

После это новый идентификатор версии сохраняется в переменной $newID.

Конечно, если вы хотите UPDATE идентификатор версии по какой-либо причине, то INSERT является неправильной командой для использования. Кроме того, зачем использовать всю таблицу для простого номера версии? Короче говоря, весь ваш стол не имеет для меня большого смысла.
Я рекомендую объяснять обоснование этого, чтобы мы могли придумать несколько лучших решений, которые вы можете использовать.