У меня есть приложение для Android, которое пытается вставить информацию в базу данных. У меня был php REST API, который отлично работал БЕЗ PDO. Я решил попробовать переключиться на подготовленные операторы PDO, и у меня начались некоторые проблемы. Я использую mysql_query для вставки информации в базу данных перед переключением на PDO. У меня такое чувство, что это будет очень маленькое и простое исправление. пожалуйста, не рви меня слишком сильно.
что я читал
Перезапись URL с помощью .htaccess
что я сделал для отладки
1) Я выполнил каждый оператор только один раз.
2) у меня нет правил перезаписи в моих файлах .htaccess:
# Do not remove this line or mod_rewrite rules and search engine friendly URLs will stop working
RewriteBase /
^^ это все, что есть в моем файле htaccess
3) из двух ($ stmt и $ sportStmt) я удалил второй ($ sportStmt), а начальный оператор вставки вставлен только один раз, как и нужно.
4) Я проверил на стороне своего приложения, не делал ли я почтовый запрос дважды, но я этого не делал. (также очевидно, когда я удалил второй оператор вставки)
5) в случае, если вам интересно, связаны ли это отношения таблиц (pmk, fmk, триггеры) ... сценарий отлично работает, прежде чем я решил переключиться на подготовленные операторы PDO.
это мой код:
<?PHP
include_once("connection2.php");
//prepare statement
if (isset($_POST['sports'])){
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
switch ($_POST['sports']){
case hockey:
$stmt = $conn->prepare("INSERT INTO hockey (name, age, league)
VALUES (:name, :age, :league)");
break;
case soccer:
$stmt = $conn->prepare("INSERT INTO soccer (name, age, league)
VALUES (:name, :age, :league)");
break;
case basketball:
$stmt = $conn->prepare("INSERT INTO basketball (name, age, league)
VALUES (:name, :age, :league)");
break;
}
$stmt->bindParam(':name', $name);
$stmt->bindParam(':age', $age);
$stmt->bindParam(':league', $league);
//insert Sport
$playerSports = $_POST['sports'];
$playerSports = trim($playerSports, '[]');
$sports = explode(',', $playerSports);
foreach ($sports as $value){
$value = trim($value, ' ');
switch($value){
case hockey:
$value = "hockey";
break;
case soccer;
$value = "soccer";
break;
case basketball;
$value = "basketball";
break;
}
$sportStmt = $conn->prepare("INSERT INTO playerSports (name, sports) VALUES (:name, :sports)
ON DUPLICATE KEY UPDATE name = VALUES(name), sports = VALUES(sports);");
$sportStmt->bindParam(':sports', $value);
$sportStmt->bindParam(':name', $name);
$name = $_POST['name'];
$sportStmt->execute();
}
echo "New records created successfully";
}
catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}
} else {
echo "did not receive category";
}
$conn = null;
?>
$aoiStmt->execute();
должен быть sport
?
@u_mulder да, извините, я забыл это изменить, когда переключил поля, чтобы сделать его более понятным. я исправил это
@BobbyAxe спасибо за совет по умолчанию, я немедленно это сделаю. этот переход был ошибкой, когда я переключал имена значений, чтобы упростить понимание этого сообщения. извините за тип
см. ошибку опечатки
case hocket:
также попробуйте добавить значения по умолчанию для ваших переключателей, даже если они ничего не делают