2011-12-04 75 views
0

下面的SQL工程100%,如果我在phpMyAdmin運行它,但如果我嘗試使用它在PHP中的PHP文件準備語句,使用:不能讓MySQL存儲過程到PHP

$stmt = $mysqli->prepare("..."); 
$stmt->execute(); 
$stmt->close(); 

我得到一個錯誤。我需要知道如何來包裝這個SQL到PHP,因爲我必須使用

SELECT @myCommand := concat("SELECT UNIX_TIMESTAMP(TIMESTAMP(CURDATE() , HalfHourTime)), 0, 0, 0, 0 
into OUTFILE 'C:/wamp/www/myApp/services/csv/filename-", DATE_FORMAT(now(),'%Y%m%d-%H%i%s'), '.csv' "' 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
FROM timeintervals_halfhours 
"); 
PREPARE stmt FROM @myCommand; 
EXECUTE stmt; 

它是基於on the post by Frank Flynn on October 6 2006 11:05pm,他說,一個PHP文件:「如果你希望使用OUTFILE或DUMPFILE具有可變的文件名你不能簡單地把它放在適當的位置 - MySQL不會解析名稱。「

在此先感謝。

+0

而錯誤是......? –

回答

0

問題是mysqli不支持單個調用中的多語句執行。
看一看http://php.net/manual/en/mysqli.multi-query.php

+0

錯誤是:我無法動態分配OUTFILE的文件名(我想將當前時間作爲文件名的一部分)。我嘗試分解成兩個單獨的查詢: – user983522

+0

例如在兩個查詢中(不起作用): require_once('connection.php'); ('C:/ wamp/www/myApp/services/csv /',NOW(),'.csv')AS文件名「; $ r1 = mysqli_query($ dbc,$ q1); $ row = mysqli_fetch_array($ r1,MYSQLI_ASSOC); //獲取第一個查詢的行\t \t //設置第二個查詢的變量 $ file = $ row [「filename」]; $ Q = 「SELECT UNIX_TIMESTAMP(TIMESTAMP(CURDATE(),HalfHourTime)),0,0,0,0 INTO OUTFILE $文件 場TERMINATED BY '' LINES TERMINATED BY '\ n' FROM timeintervals_halfhours」; $ r = mysqli_query($ dbc,$ q); – user983522