У меня странная вещь, происходящая с моим вводом в базу данных mysql из скрипта php. Я сократил свой код до минимума, чтобы показать, что происходит. Когда я запускаю первый фрагмент кода ниже данных хранилища, "Fruitveg" не попадает в базу данных. Вместо этого берется буква "k", которая была взята из пропусков var $ item [2].
Но если я изменил порядок события на второй фрагмент ниже и сделаю переменную store первой частью этого кода, он будет работать нормально, а хранилище Fruitveg будет помещено в базу данных в порядке. Я попытался выяснить, что не так, но не может получить ответ.
Любая помощь пожалуйста
Snippet One
}
catch (PDOException $e)
{
echo 'Error: ' . $e->getMessage();
exit();
}
$sql = "INSERT INTO shopping_list (item, store, qty, prefex ) VALUES
(:item,
:store, :qty, :prefex )";
$stmt = $pdo->prepare($sql);
$item[0] = "2";
$item[1] = "g";
$item[2] = "leaks";
$item[3] = "Fruieveg";
echo $item[3];
$qty = $item[0];
$prefex = $item[1];
$item = $item[2];
$store = $item[3]; #when here only letter 'k' is inputted into mysql
$stmt->bindParam(':store', $store);
$stmt->bindParam(':item', $item);
$stmt->bindParam(':qty', $qty);
$stmt->bindParam(':prefex', $prefex);
$stmt->execute();
$conn = null;
?>
Фрагмент 2
<?php
# Connect to data base
try
{
$pdo = new PDO('mysql:host=localhost; dbname=shopping', 'phpmyadmin',
'Odiham');
}
catch (PDOException $e)
{
echo 'Error: ' . $e->getMessage();
exit();
}
$sql = "INSERT INTO shopping_list (item, store, qty, prefex ) VALUES
(:item, :store, :qty, :prefex )";
$stmt = $pdo->prepare($sql);
$item[0] = "2";
$item[1] = "g";
$item[2] = "leaks";
$item[3] = "Fruieveg";
echo $item[3];
$store = $item[3]; #when here only letter 'k' is inputted into mysql
$qty = $item[0];
$prefex = $item[1];
$item = $item[2];
$stmt->bindParam(':store', $store);
$stmt->bindParam(':item', $item);
$stmt->bindParam(':qty', $qty);
$stmt->bindParam(':prefex', $prefex);
$stmt->execute();
$conn = null;
?>
Вы заменяете свой исходный массив $item
одной из своих ячеек:
$item = $item[2]; // $item becomes leaks
$store = $item[3]; // $store gets 4th letter from leaks - 'k'
Когда вы меняете заказ, вы правильно устанавливаете $ store из исходного массива $ item перед заменой переменной $ item, поэтому почему это работает.
Для поля БД попробуйте использовать что-то вроде name
вместо элемента... тогда вы можете избежать этой случайной перезаписи
$item = $item[2];
Вы хотели это сделать? Ой, подождите, я думаю, я вижу.