2010-05-01 5 views
3

J'ai ce code que j'Executer sur phpmyadmin qui fonctionne à 100%PHP vs Phpmyadmin

Create Temporary Table Searches (id int, dt datetime); 
Create Temporary Table Searches1 (id int, dt datetime, count int); 

insert into Searches(id, dt) select a.id, now() from tblSavedSearches a; 

insert into Searches1(id, dt, count) 
select 
    b.savedSearchesId, 
    (select c.dt from tblSavedSearchesDetails c where b.savedSearchesId = c.savedSearchesId order by c.dt desc limit 1) as 'dt', 
    count(b.savedSearchesId) as 'cnt' 
from tblSavedSearchesDetails b 
group by b.savedSearchesId; 

insert into tblSavedSearchResults(savedSearchId,DtSearched,isEnabled) 
select id,now(),0 from Searches where not id in (select savedSearchId from tblSavedSearchResults); 

update  tblSavedSearchResults 
inner join Searches1 on tblSavedSearchResults.savedSearchId = Searches1.id  
Set  tblSavedSearchResults.DtSearched = Searches1.dt, tblSavedSearchResults.isEnabled = 1; 

Cependant quand je mets le même code en php comme ci-dessous, il génère une erreur

$dba = DbConnect::CreateDbaInstance(); 
$query = ""; 

$query.="Create Temporary Table Searches (id int, dt datetime); "; 
$query.="Create Temporary Table Searches1 (id int, dt datetime, count int); "; 

$query.="insert into Searches(id, dt) select a.id, now() from tblSavedSearches a; "; 

$query.="insert into Searches1(id, dt, count) "; 
$query.="select "; 
$query.=" b.savedSearchesId, "; 
$query.=" (select c.dt from tblSavedSearchesDetails c where b.savedSearchesId = c.savedSearchesId order by c.dt desc limit 1) as 'dt', "; 
$query.=" count(b.savedSearchesId) as 'cnt' "; 
$query.="from tblSavedSearchesDetails b "; 
$query.="group by b.savedSearchesId; "; 

$query.="insert into tblSavedSearchResults(savedSearchId,DtSearched,isEnabled) "; 
$query.="select id,now(),0 from Searches where not id in (select savedSearchId from tblSavedSearchResults); "; 

$query.="update  tblSavedSearchResults "; 
$query.="inner join Searches1 on tblSavedSearchResults.savedSearchId = Searches1.id ";  
$query.="Set  tblSavedSearchResults.DtSearched = Searches1.dt, tblSavedSearchResults.isEnabled = 1; "; 

$dba->DbQuery($query) or die(mysql_error());  

Je reçois l'erreur suivante

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Create Temporary Table Searches1 (id int, dt datetime, count int) insert into S' at line 1 

S'il vous plaît, si quelqu'un pouvait me aider dans cette ...

Merci

+1

a) que vous utilisez l'dba objet $ pour effectuer l'opération de base de données, mais la fonction mysql_error() pour aller chercher erreurs ... donc c'est une encapsulation partielle au mieux. Pourquoi ne pas utiliser une couche d'accès ou d'abstraction existante, par ex. http://docs.php.net/pdo? b) Pourquoi voulez-vous effectuer plusieurs déclarations (plus ou moins) en même temps? Il ne les rend pas atomiques comme dans http://en.wikipedia.org/wiki/ACID de toute façon ... – VolkerK

Répondre

1

Vous ne pouvez exécuter des requêtes qu'une à la fois via PHP. Appelez $dba->DbQuery() une fois par nouvelle requête à la place.

4

Si votre méthode $dba->DbQuery($query) utilise réellement mysql_query(que je suppose que oui, comme vous utilisez mysql_error), alors, vous ne pouvez pas exécuter plus d'une requête par appel (citant):

mysql_query() envoie une requête unique, (plusieurs requêtes ne sont pas pris en charge) à la base de données active sur le serveur qui est associé à la spécifiée link_identifier.


Vous devez soit:

  • séparer vos requêtes, et appelez mysql_query une fois pour chaque requête
    • devrait être assez facile, ici: au lieu de concatening toutes les requêtes en $query, il suffit de les exécuter un par un.
  • ou cesser d'utiliser mysql_*, et commencer à travailler avec MySQLi, qui fournit une fonction mysqli_multi_query
+0

Salut à tous, Merci mille fois, travaillé comme un charme, exécuté chaque requête individuellement et voala! Merci Cette forme les rochers! – user330306

+1

@ user330306: si vous recevez une solution de votre problème, vous devez marquer la réponse comme acceptée. – Oleg