$query1 = 'SELECT * FROM table WHERE field = ?';
確定查詢的基礎上,查詢字符串
$query2 = 'UPDATE table SET field = ?';
我如何檢測查詢修改數據庫,或者它只是請求結果的類型?
如果我爲SELECT
(如果發現查詢是隻讀的)執行strpos就足夠了嗎?或者還有其他情況需要處理?
$query1 = 'SELECT * FROM table WHERE field = ?';
確定查詢的基礎上,查詢字符串
$query2 = 'UPDATE table SET field = ?';
我如何檢測查詢修改數據庫,或者它只是請求結果的類型?
如果我爲SELECT
(如果發現查詢是隻讀的)執行strpos就足夠了嗎?或者還有其他情況需要處理?
假設它是MySQL的..
mysql_affected_rows()
顯示,被插入affeced行數/刪除/更新等,而mysql_num_rows()
顯示你有多少選擇。根據哪個函數返回一個值,您應該能夠確定響應的類型。
OP很清楚地詢問如何確定*而不運行查詢 - 請閱讀在回答之前妥善解決問題和評論。 – DaveRandom 2012-02-09 16:00:06
不確定你是否在那裏 - 操作系統要求確定如何迴應查詢..看到上面的評論:@jonathan - 沒有。我正在構建一個簡單的數據庫API,並且需要確定我應該返回什麼。我將其解釋爲:「我工作並更新了100條記錄」或「這裏是我找到的記錄」。 – FreudianSlip 2012-02-09 16:27:45
即使這是真的,取決於驅動程序,簡單的'is_bool()'/'is_resource()'(或'is_object()')檢查將是更可靠的方法來確定您是否有返回結果。即使文檔沒有說明,'mysql_affected_rows()'仍然會在'SELECT'後面給出結果。 – DaveRandom 2012-02-09 16:47:40
我不認爲檢查SELECT是一個好主意,因爲SELECT可以在子查詢中使用。然而,包含UPDATE的任何東西肯定會修改數據庫 – BeRecursive 2012-02-09 15:39:11
想想'update table set col1 =(從tab2選擇abc)'等等 – 2012-02-09 15:39:32
if(strpos('SELECT',$ query)=== 0) $ is_read_only = true;'? – Alex 2012-02-09 15:40:38