2012-11-29 6 views
0

J'ai une table image_tb, qui a 3 champs, id,images,link (id est auto_increment auto), c'est mon code d'insertion:insert php mysql (max (id) +1)

mysql_query(" 
insert into image_tb 
(images,link) 
select 
'".(max(id)+1).".jpeg','".$link."' 
from image_tb 
"); 

il retourne:

Warning: max(): When only one parameter is given, it must be an array 

comment modifier? Merci.

Répondre

0

font à l'intérieur de la requête,

mysql_query(" 
insert into image_tb (images,link) 
select CONCAT(COALESCE((SELECT MAX(ID) + 1 FROM image_tb),1), '.jpeg'),'".$link."' 
from image_tb 
"); 

votre requête est vulnérable SQL Injection, s'il vous plaît lire l'article ci-dessous pour en protéger

3

mieux vous définissez une fonction, obtenir le dernier id par requête comme ceci: "sélectionnez id de l'image_tb ordre par id desc limite 0,1" puis l'augmenter, son realibe.

+0

cela vous coûtera 2 requêtes. –

+0

Je pense que php a une fonction qui retourne le dernier identifiant d'insertion. – Sentencio

+0

@Sentencio: mysql s'assure que c'est le dernier id de la connexion courante, donc il n'y aura pas de problèmes si vous mettez cette instruction juste après la requête d'insertion. Pas de soucis sur les autres processus faisant des insertions. Pas besoin d'envelopper dans une transaction. Le manuel mysql dit: "L'ID généré est conservé dans le serveur par connexion, ce qui signifie que la valeur renvoyée par la fonction à un client donné est la première valeur AUTO_INCREMENT générée pour la déclaration la plus récente affectant une colonne AUTO_INCREMENT par ce client.C'est la raison pour laquelle vous ne devriez pas utiliser sélectionnez MAX (ID) – msk

3

Je pense que vous ne voulez pas fermer la chaîne:

select '" ... 

devrait être

select MAX(id) + 1 

Sinon, vous utilisez la fonction php max, et je ne pense pas que vous avez l'intention de fais ça du tout. Par ailleurs, vous ne devriez pas utiliser mysql_*. Utilisez PDO ou mysqli.

0

Avez-vous envisagé quelque chose comme ça?

  1. Insérez des données avec le nom de fichier vide
  2. table de mise à jour où le nom de fichier est vide, nom de fichier défini à CONCAT (id, ".jpeg") ou quelque chose (CONCAT est fonction utilisée pour les chaînes "add").