У меня есть приложение для Android, которое пытается вставить информацию в базу данных. У меня был php REST API, работающий без проблем с PDO. Я решил попробовать перейти к заявлениям, подготовленным PDO, и у меня начались некоторые проблемы. Я использую mysql_query для вставки информации в базу данных, прежде чем я переключился на PDO. У меня есть ощущение, что это будет очень маленькое и простое решение. пожалуйста, не рви меня слишком сильно.
что я прочитал
PDO Вставка дважды
Ошибка оператора PHP 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, triggers) .. скрипт отлично работал до того, как я решил переключиться на подготовленные операторы 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;
?>