PHP Получают последний идентификатор вставки от соединения ODBC

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

updateCourseGrade = (courseGrade, id) => {
  const course = this.state.courses.find(course => course.id === id);
  if (course) {
    const updatedCourse = { ...course, courseGrade };
    const updatedCourses = this.state.courses
      .filter(course => course.id !== id)
      .concat(updatedCourse);
    this.setState({ courses: updatedCourses });
  }
}

Это может быть довольно громоздким, но это является основой для философии самого React. Если вы хотите облегчить себе задачу, я рекомендую проверить immer , библиотеку NPM, которая экспортирует одну функцию. Обычно я не рекомендую сторонние библиотеки в качестве решения, но мне особенно нравится immer. Сначала это будет выглядеть странно, но работает с использованием прокси (новая языковая функция в ES6):

updateCourseGrade = (courseGrade, id) => {
  this.setState((
    produce(draftState => {
      const index = draftState.courses.findIndex(course => (
        id === course.id
      ));
      draftState.courses[index].courseGrade = courseGrade;
    })
  ))
}

Часто immer не нужен, но при работе с массивами объектов и особенно с вложенные объектные структуры могут быть удачной попыткой помочь вам написать чистый код, который хорошо работает.

7
задан epochwolf 23 April 2009 в 13:38
поделиться

6 ответов

Если вы используете базы данных с PHP, я настоятельно рекомендую использовать PDO (простая оболочка базы данных для многих распространенных механизмов баз данных, все более и более поддерживаемая все время, часть канона PHP), и поэтому используйте PDO :: lastInsertId , если ваша база данных поддерживает эквивалент mysql_insert_id.

Не используйте «SELECT max (id) FROM table;» позже это может привести к серьезным странным и трудно обнаруживаемым ошибкам.

* ** ОБНОВЛЕНИЕ : Хорошо, вы используете ODBC, и я подозреваю, что вы после odbc_cursor , Я по-прежнему настойчиво рекомендую использовать PDO, поскольку он имеет драйвер ODBC. (ODBC в моих глазах - сварливый горький старик, который бормочет себе под нос, рушит свой разваливающийся грузовик, пока модные и эффективные парни из PDO несутся мимо в своих сексуальных VOLVO S90's)

3
ответ дан 7 December 2019 в 18:45
поделиться

Это зависит от типа базы данных, но посмотрите синтаксис SEQUENCE для вашей базы данных.

0
ответ дан 7 December 2019 в 18:45
поделиться

Вы вставляете строки в свою базу данных через PHP? Если это так, возможно, вы можете сгенерировать уникальный первичный ключ с помощью uniqid () - тогда вы будете знать идентификатор без необходимости запрашивать базу данных.

Если невозможно обновить тип ключа, возможно, вы все равно можете вставить уникальный id, когда вы делаете вставки, так что вы могли бы сделать запрос, подобный следующему:

SELECT id FROM mytable WHERE rowid = '$myuniqueid'

Таким образом, вы гарантируете, что извлекаете правильный идентификатор из базы данных - гораздо лучшее решение, чем MAX (id).

-2
ответ дан 7 December 2019 в 18:45
поделиться

Использование

SELECT max(id) FROM table;

должно работать внутри транзакции, или ODBC не поддерживает транзакции?

-3
ответ дан 7 December 2019 в 18:45
поделиться

Этот макет нельзя буквально использовать на грани кнопки . Аналогичный вид можно получить с помощью свойства android: drawureRight на кнопке .

-121--3450557-

просто используйте лицевые косые черты везде, если вы в любом случае будете перемещать это в linux box. php для окон может понять это.

$file='c:/Program Files (x86)/work/site/js/rowlock.js';
-121--3832324-

SELECT @ @ IDENTITY AS ID

4
ответ дан 7 December 2019 в 18:45
поделиться

Если у вас есть MySQL под ODBC - вы можете использовать следующий запрос:

"SELECT LAST_INSERT_ID( );"

Он должен быть выполнен сразу после выполнения INSERT-запроса.

Для других баз данных - используйте другие специфические запросы...

0
ответ дан 7 December 2019 в 18:45
поделиться
Другие вопросы по тегам:

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