У меня возникла эта проблема. Я нашел способ загрузить свои данные в формате .xls и ввести правильную информацию в mysql. Я использую phpmyadmin и php для загрузки файла, но прямо сейчас у меня проблемы с первичными ключами ... извините, я вроде как новое программирование через php, и я не знаю почему, как только я определю свой первичный ключ и сценарий отправляет данные, которые первичный ключ не уважает, и не назначает один и тот же идентификатор (первичный ключ) одному и тому же значению, например:
и мой код для ввода данных выглядит следующим образом:
<?php
require_once 'db_con.php';
if (isset($_POST["submit_file"]))
{
$file = $_FILES["file"]["tmp_name"];
$file_open = fopen($file,"r");
while(($csv = fgetcsv($file_open, 1000, ",")) !== false)
{
$fecha= $csv[0];
$tipo = $csv[1];
$impresion = $csv[2];
$hojas= $csv[3];
$cadena_nombre = explode('(', $csv[4]);
$usuario =$cadena_nombre [0];
$usuario =$csv[4];
$stmt = $DBcon->prepare("INSERT INTO trabajo
(fecha,tipo,impresion,hojas,usuario)
VALUES(:fecha,:tipo,:impresion,:hojas,:usuario)");
$stmt->bindparam (':fecha', $fecha);
$stmt->bindparam(':tipo', $tipo);
$stmt->bindparam(':impresion', $impresion);
$stmt->bindparam(':hojas', $hojas);
$stmt->bindparam(':usuario', $usuario);
$stmt->execute();
}
}
echo "CSV Imported Successfully";
?>
Мой DDL выглядит так:
CREATE TABLE `trabajo` (
`fecha` date NOT NULL,
`hojas` int(25) NOT NULL,
`impresion` int(25) NOT NULL,
`tipo` varchar(60) NOT NULL,
`usuario` varchar(60) NOT NULL,
`usuario_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `trabajo`
ADD PRIMARY KEY (`usuario_id`);
--
-- AUTO_INCREMENT de las tablas volcadas
--
--
-- AUTO_INCREMENT de la tabla `trabajo`
--
ALTER TABLE `trabajo`
MODIFY `usuario_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=12592;
COMMIT;
Вы получаете как $cadena_nombre, так и $usuario_id от $csv[4]. Это неверно. Это?
@RiggsFolly right Я разместил неправильный код, но все же .... я не получаю первичные ключи
Так что было бы хорошо увидеть правильный код,
@RiggsFolly done only usuario_id был неправильным
Теперь $cadena_nombre = explode('(', $csv[4]); $usuario =$cadena_nombre [0]; $usuario =$csv[4]; Или мне что-то здесь не хватает
@RiggsFolly, да, это кажется правильным, но я только хочу знать, есть ли способ указать php для вставки тех же данных в уникальный идентификатор, есть много регистров, и я должен использовать PK для связи таблиц
Так является ли usario_id столбцом автоинкремента?
@MewkOna показывает DDL для ваших таблиц, чтобы мы могли понять, что вы подразумеваете под первичными ключами? Кроме того, поскольку вы используете bindParam, вы можете выбросить подготовку и привязку за пределами цикла (после того, как вы очистили свою ключевую проблему)
мой DDL выглядит так, я ненавижу обновил свой пост:
@RiggsFolly да usuario_id - это автоинкремент, и действительно, он отправляет первичные ключи, но, как вы можете видеть, USER_ID многократно повторяет значения и не присваивает уникальные значения
Похоже, ваша таблица - это список заданий на печать или что-то в этом роде, где каждый пользователь может быть указан более одного раза. Таким образом, присвоение уникального идентификатора пользователя строкам в этой таблице (вместо уникального идентификатора задания на печать) кажется неправильным, поскольку один и тот же пользователь может отправить задание печати 1 и задание печати 4.
@James Мне было интересно, могу ли я рассматривать каждый идентификатор пользователя как первичный ключ вместо того, чтобы назначать первичный ключ каждого регистра для выполнения запросов.






Взгляните на документацию для
LOAD DATA INFILE