Я работаю над таблицей, которая имеет 4 столбца, и первый является автоматическим целым числом постепенного увеличения, названным идентификатором.
Если я собираюсь вставить в эту таблицу с помощью mysqli подготовленные операторы, я продолжаю испытывать затруднения, вставляющие запрос, который работает. Используя phpMyAdmin Это говорит мне давать ему ПУСТОЙ УКАЗАТЕЛЬ. Я попробовал это:
$query = "INSERT INTO tbl (id, col2, col3, col4) VALUES ('NULL', ?, ?, ?)";
$stmt -> bind_param("ssi", $col2, $col3, $col4)
И это
$query = "INSERT INTO tbl (id, col2, col3, col4) VALUES (NULL, ?, ?, ?)";
$stmt -> bind_param("ssi", $col2, $col3, $col4)
И только дайте bind_param 3 аргумента (последние 3). Ни один из тех не работает. Я также попробовал это:
$null = NULL;
$query = "INSERT INTO tbl (id, col2, col3, col4) VALUES (?, ?, ?, ?)";
$stmt -> bind_param("issi", $null, $col2, $col3, $col4);
Ни один из них не работает. Существует ли стандартизованный способ вставки в этот тип таблицы?
Просто пропустите поле id
, MySQL заполнит его автоматически:
$query = "INSERT INTO tbl (col2, col3, col4) VALUES (?, ?, ?)";
$stmt->bind_param("ssi", $col2, $col3, $col4)
Если id
поле auto_increment
, тогда просто не указывайте его в запросе insert
:
$query = "INSERT INTO tbl (col2, col3, col4) VALUES (?, ?, ?)";
И, конечно, не пытайтесь привязать какой-либо параметр к нему; -)
Поскольку он генерируется MySQL, нет необходимости передавать этот столбец.
Это должно работать, потому что id автоматически добавляется (по этой причине увеличивается) с помощью mysql:
$query = "INSERT INTO tbl (col2, col3, col4) VALUES (?, ?, ?)";
В некоторых случаях вам нужно явно вставить поле auto_incremtnt, если это case, то вы можете использовать оператор INSERT IGNORE
, см. руководство по mysql для получения дополнительной информации об этом.
Этот
$query = "INSERT INTO tbl (id, col2, col3, col4) VALUES (NULL, ?, ?, ?)";
$stmt -> bind_param("ssi", $col2, $col3, $col4)
обязательно должен работать. Какую именно ошибку вы получаете?
Теперь я выгляжу лучше, у вас есть $ query и $ stmt. Что у вас есть между ними? Возможно, вам не хватает какой-то части.
Это должно быть
$stmt = $mysqli->prepare("INSERT INTO tbl (id, col2, col3, col4) VALUES (NULL, ?, ?, ?)");
$stmt -> bind_param("ssi", $col2, $col3, $col4);
$stmt ->execute();