2010-05-01 112 views
3

我有了這個代碼,我在phpmyadmin的其中工程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; 

但是執行的時候,我把相同的代碼在PHP如下它產生一個錯誤

$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());  

我收到以下錯誤

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 

請,如果有人可以幫助我這個...

感謝

+1

對象$ DBA對數據庫執行操作,但功能mysql_error一個mysqli_multi_query()函數來獲取錯誤......所以這是最好的部分封裝。爲什麼不使用現有的訪問或抽象層,如http://docs.php.net/pdo? b)爲什麼你想一次執行多個語句(或多或少)?它不會使它們像http://en.wikipedia.org/wiki/ACID中的原子一樣... – VolkerK 2010-05-01 10:52:44

回答

1

只能執行查詢的一個在通過PHP的時間。相反,每個新查詢請撥打$dba->DbQuery()一次。

4

如果您$dba->DbQuery($query)方法實際上是用mysql_query(我想是這樣,因爲你正在使用mysql_error,那麼,你就不能執行每次通話(報價)以上的查詢

mysql_query()發送一個唯一的查詢(多個查詢不支持)當前活動 數據庫與指定 link_identifier關聯 在服務器上。


你必須要麼:

  • 分開你的查詢,併爲每個查詢
    • 調用mysql_query一次應該是很容易的,在這裏:不是concatening所有查詢到$query,只需一個一個地執行。
  • 或停止使用mysql_*,並開始與MySQLi工作,它提供了一個),你正在使用
+0

嗨, 感謝上百萬,像魅力一樣工作,分別執行每個查詢和voala! 謝謝 這種形式的岩石! – user330306 2010-05-01 13:36:41

+1

@ user330306:如果您收到問題的解決方案,則應將答案標記爲已接受。 – Oleg 2010-08-10 04:56:09