J'ai des problèmes avec mysqli_multi_query. Je peux INSERT INTO
plusieurs fois, mais dès que j'inclue un DELETE
, toutes les requêtes suivantes ne fonctionnent pas. Fait intéressant, cette requête fonctionne bien lorsqu'elle est collée dans la boîte de dialogue phpMyAdmin SQL.Problème avec mysqli_multi_query
SET @contact_id := 1;
INSERT INTO `contacts_tags` (`contact_id`, `tag_id`)
SELECT * FROM (SELECT @contact_id, 1) AS tmp
WHERE NOT EXISTS (
SELECT `contact_id`, `tag_id` FROM `contacts_tags`
WHERE `contact_id` = @contact_id AND `tag_id` = 1
);
DELETE FROM `contacts_tags`
WHERE `contact_id`[email protected]_id AND `tag_id` NOT IN (1);
Toutes les requêtes jusqu'à à la requête DELETE
exécuter comme prévu à partir de mon code php.
Ajout d'autres requêtes en tant que journaux (voir ci-dessous), étape 1, @contact_id, étape 2a, étape 2b et étape 2c sont toutes insérées. Le «Dernier» ne le fait pas. (Et bien sûr, ni ne le DELETE
un.
INSERT INTO `tf_logs` (`query`) VALUES ('Step0');
SET @contact_id := 1;
INTO `tf_logs` (`query`) VALUES ('Step1');
INSERT INTO `contacts_tags` (`contact_id`, `tag_id`)
SELECT * FROM (SELECT @contact_id, 1) AS tmp
WHERE NOT EXISTS (
SELECT `contact_id`, `tag_id` FROM `contacts_tags`
WHERE `contact_id` = @contact_id AND `tag_id` = 1
);
INSERT INTO `tf_logs` (`query`) VALUES (@contact_id);
INSERT INTO `tf_logs` (`query`) VALUES ('Step 2a');
INSERT INTO `tf_logs` (`query`) VALUES ('Step 2b');
INSERT INTO `tf_logs` (`query`) VALUES ('Step 2c');
DELETE FROM `contacts_tags`
WHERE `contact_id`[email protected]_id AND `tag_id` NOT IN (1);
INSERT INTO `tf_logs` (`query`) VALUES ('Last');
Pour créer cette requête, j'append progressivement des valeurs à une chaîne, puis utilisez mysqli_multi_query
, comme ci-dessous. Pour vérifier exactement ce que la variable contient, je me suis envoyé par courrier électronique le requête finale. Copier et coller le contenu du courrier électronique dans phpMyAdmin exécute les requêtes exactement comme prévu.
$queryString = "";
$queryString .= "INSERT INTO `tf_logs` (`query`) VALUES ('Step0'); ";
$queryString .= "
SET @contact_id := $contactId; ";
//...and so on
if(mysqli_multi_query($connection,$queryString)) {
echo "Success.";
$to = "[email protected]";
$subject = "SQL query";
$headers = "From: [email protected]";
mail($to,$subject,$queryString,$headers);
} else {
echo "Error.";
}
Je suis sûr que je manque quelque chose évidente, mais quelques jours de googler m'a conduit à la folie. Merci à l'avance!
Pouvez-vous afficher la définition de votre table - tf_logs – Mihai
Il existe une colonne 'query' de type' text'. Pourquoi demandez-vous? Pour moi, le problème semble se trouver dans la requête DELETE? La table entière est seulement là comme un moyen simple de tester si je suis capable d'insérer une valeur (c'est-à-dire de vérifier que la connexion fonctionne, le php s'exécute, et de résoudre le problème avec le reste de mon code) . Je serais plus qu'heureux de supprimer la table et toutes les références à celle-ci! – Tim
Y a-t-il une contrainte qui empêcherait la suppression de se terminer? –