Что такое необработанный тип и почему я часто слышу, что они не должны использоваться в новом коде?
«Необработанный тип» - это использование общего класс без указания аргумента (ов) типа для его параметризованного типа (ов), например используя List
вместо List<String>
. Когда дженерики были введены в Java, несколько классов были обновлены для использования дженериков. Использование этого класса в качестве «необработанного типа» (без указания аргумента типа) позволило сохранить прежний код.
«Необработанные типы» используются для обратной совместимости. Их использование в новом коде не рекомендуется, потому что использование универсального класса с аргументом типа допускает более сильную типизацию, что, в свою очередь, может улучшить понятность кода и привести к появлению потенциальных проблем раньше.
Что такое альтернатива, если мы не можем использовать необработанные типы и как это лучше?
. Предпочтительной альтернативой является использование общих классов, как предполагалось, - с подходящим аргументом типа (например, List<String>
). Это позволяет программисту более конкретно указывать типы, придавая будущим сопровождающим больше смысла предполагаемое использование переменной или структуры данных и позволяет компилятору обеспечивать лучшую безопасность типов. Эти преимущества вместе могут улучшить качество кода и помочь предотвратить появление некоторых ошибок кодирования.
Например, для метода, в котором программист хочет, чтобы переменная List, называемая «имена», содержит только строки:
List<String> names = new ArrayList<String>();
names.add("John"); // OK
names.add(new Integer(1)); // compile error
Используйте функцию mysql_insert_id () .
См. аналогичный вопрос здесь
Во всем этом обсуждении я предполагаю, что причина проверки max id заключается в том, чтобы знать, какой идентификатор должен быть следующим .. (если мой максимальный id равен 5, тогда следующий будет 5 + 1 = 6).
>> Если это не причина, мои лучшие извинения
Случай, если какая-то информация INSERTs между вашим CHECK и INSERT даст вам неправильный идентификатор.
Поэтому его можно решить, если вы создадите хеш, который может включать отметку времени или другое уникальное значение.
Затем в той же функции вы можете вставить свою информацию с пустыми значениями и вашим хешем. Это создало бы идентификатор, если вы выбрали AUTO_INCRECEMENT.
Тогда в той же функции вы все равно будете иметь свой хэш, и вы можете искать id с тем же хэшем. И затем вы можете заполнить пустые значения с помощью mysql UPDATE.
Это включает в себя немного больше подключений, но это все еще способ сделать это ...
Удачи вам в этом.
С помощью транзакции MySQLi
я иногда не мог получить mysqli::$insert_id
, потому что он вернул 0. Особенно если я использовал хранимые процедуры, которые выполняли INSERT
s. Таким образом, в транзакции есть другой способ:
<?php
function getInsertId(mysqli &$instance, $enforceQuery = false){
if(!$enforceQuery)return $instance->insert_id;
$result = $instance->query('SELECT LAST_INSERT_ID();');
if($instance->errno)return false;
list($buffer) = $result->fetch_row();
$result->free();
unset($result);
return $buffer;
}
?>
То, что вы написали, даст вам наибольший id
, предполагая, что они уникальны и автоматически увеличиваются, что было бы неплохо, если бы вы были в порядке с приглашением параллелизма. Поскольку вы используете MySQL в качестве своей базы данных, существует определенная функция LAST_INSERT_ID()
, которая работает только с текущим соединением, которое вставляло. PHP предлагает определенную функцию для слишком называемого mysql_insert_id
.
Чистый и простой -
$selectquery="SELECT id FROM tableName ORDER BY id DESC LIMIT 1";
$result = $mysqli->query($selectquery);
$row = $result->fetch_assoc();
echo $row['id'];
Пожалуйста, используйте PDP, а затем попробуйте
$stmt = $db->prepare("...");
$stmt->execute();
$id = $db->lastInsertId();
ПРИМЕЧАНИЕ. Если вы делаете несколько вставк с одним из операторов, то mysqli :: insert_id будет неправильным.
Таблица:
create table xyz (id int(11) auto_increment, name varchar(255), primary key(id));
Теперь, если вы выполните:
insert into xyz (name) values('one'),('two'),('three');
mysqli :: insert_id будет 1 не 3.
Чтобы получить правильное значение:
mysqli::insert_id + mysqli::affected_rows) - 1
Это был документ, но он немного неясным.
mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d\n", ***mysql_insert_id()***);
Если в вашей таблице есть столбец AUTO INCREMENT, такой как UserID, Emp_ID, ... тогда вы можете использовать этот запрос для получения последней вставленной записи SELECT * FROM table_name, где UserID = (выберите MAX (UserID) из table_name) В PHP-коде:
$con = mysqli_connect('localhost', 'userid', 'password', 'database_name');
if (!$con) {
die('Could not connect: ' . mysqli_error($con));
}
$sql = "SELECT * FROM table_name where UserID=(select MAX(UserID)from table_name)";
$result = mysqli_query($con, $sql);
Затем вы можете использовать извлеченные данные в качестве своего требования
Использовать mysqli, поскольку mysql лишает
<?php
$mysqli = new mysqli("localhost", "yourUsername", "yourPassword", "yourDB");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
// Conside employee table with id,name,designation
$query = "INSERT INTO myCity VALUES (NULL, 'Ram', 'Developer')";
$mysqli->query($query);
printf ("New Record has id %d.\n", $mysqli->insert_id);
/* close connection */
$mysqli->close();
?>
существует функция знать, что последний идентификатор, вставленный в текущее соединение
mysql_query('INSERT INTO FOO(a) VALUES(\'b\')');
$id = mysql_insert_id();
, плюс использование max - плохая идея, потому что это может привести к проблемам, если ваш код используется одновременно в двух разных сеансах.
Эта функция называется mysql_insert_id
Попробуйте это нормально:
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$query = "INSERT blah blah blah...";
$result = mysqli_query($link, $query);
echo mysqli_insert_id($link);
Вы можете получить последний вставленный id с помощью встроенной функции php mysql_insert_id();
$id = mysql_insert_id();
, а также получить последний идентификатор с помощью
$id = last_insert_id();
Получить последний вставленный id в codeigniter. После выполнения запроса insert просто используйте одну функцию под названием insert_id()
в базе данных, он вернет последний вставленный id
Ex:
$this->db->insert('mytable',$data);
echo $this->db->insert_id(); //returns last inserted id
в одной строке
echo $this->db->insert('mytable',$data)->insert_id();
Я предпочитаю использовать чистый синтаксис MySQL, чтобы получить последний идентификатор auto_increment из таблицы, которую я хочу.
php mysql_insert_id () и mysql last_insert_id () предоставляют только последний идентификатор транзакции.
Если вам нужен последний идентификатор auto_incremented любой таблицы в вашей схеме (а не только последняя транзакция), вы можете использовать этот запрос
SELECT AUTO_INCREMENT FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'my_database'
AND TABLE_NAME = 'my_table_name';
Вот и все.
Я попытался
mysqli_insert_id ($ dbConnectionObj)
Это возвращает последний вставленный идентификатор текущего соединения, поэтому, если вы правильно управляете своими подключениями, это должно работать , По крайней мере, работал для меня.
Грустно не видеть никаких ответов с примером.
Использование Mysqli :: $ insert_id:
$sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)";
$mysqli->query($sql);
$last_inserted_id=$mysqli->insert_id; // returns last ID
Использование PDO :: lastInsertId:
$sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)";
$database->query($sql);
$last_inserted_id=$database->lastInsertId(); // returns last ID
Все в порядке. Также вы можете использовать LAST_INSERT_ID ()
mysql_insert_id
сразу после i> своегоmysql_query
. Если, конечно, вы выполняете несколько других запросов в одном и том же соединении между ними, ну нет ничего, что могло бы вам помочь. – deceze♦ 5 May 2012 в 02:29PDO
смещением мы ........ – Pacerier 28 January 2015 в 12:44PDO
смещением мы видим повсюду? Давайте снова посмотрим на сравнение функций . Понятно, чтоmysqli
является победителем, когда вам нужно загрязнять руки с помощью низкоуровневого материала. Другими словами, даже если вы выберете PDO, он в конечном итоге i> должен будет использоватьmysqli
в любом случае. – Pacerier 28 January 2015 в 12:44