2012-08-13 35 views
2

我在Zend框架與數據庫適配器

$adapter = Zend_Db_Table::getDefaultAdapter(); 

插入數據,並執行INSERT語句是這樣的:

$q = "INSERT INTO questions (category_id, user_id, `text`, active) 
VALUES($category_id, ".$user_id.", '".$question_text."', 1)"; 
$adapter->query($q); 

但有時此查詢不起作用。這隻發生在$question_text相當長(> 1000個字符)並且不依賴於內容而只依賴於長度的情況下。在phpmyadmin中執行相同的語句沒有問題。 (該數據庫字段是文本)

當我使用

$adapter->exec($q); 

的查詢工作正常爲好。

現在我的問題:

是什麼導致了問題的查詢()語句?

是否有任何缺點使用exec()代替?

+2

看起來像這是/是preg函數的錯誤,請參閱與您所描述的症狀相匹配的錯誤報告http://framework.zend.com/issues/browse/ZF-8399 – martynthewolf 2012-08-13 17:03:09

+0

您是否正確地轉義了輸入數據?如果使用面向對象的接口進行插入,會發生問題嗎?你還使用什麼操作系統和ZF版本?您是否檢查查詢的結果,並且您是否收到任何錯誤消息或者只是沒有新的數據? – drew010 2012-08-13 18:06:01

回答

2

如果您更改插入以使用面向對象的接口爲您轉義輸入數據,那麼您是否仍然有問題?

$values = array('category_id' => $category_id, 
       'user_id'  => $user_id, 
       'text'  => $question_text, 
       'active'  => 1); 

$inserted = $adapter->insert('questions', $values); 

$inserted應該包含我碰到了同樣的錯誤,當我試圖將一個PDF插入到BLOB受操作影響的行數,1

+0

我沒有得到@ drew010,如果horen想要插入多個記錄使用這個查詢,那麼你的答案是足夠好的?我不這麼認爲。N問題不是逃避...問題是操作系統(霍倫必須在MAC或WIN)。看看我的答案霍倫 – 2013-07-08 09:02:51

2

。 PHP的mysql_query()函數工作正常,但Zend函數query()或exec()不起作用,雖然沒有錯誤或異常拋出。這似乎是Zend已知的一個問題,因爲存在一些錯誤。

對我來說什麼並不是解決這個問題的最優雅的方式,但它起作用。如上所述,PHP的mysql_query()工作,所以我從Zend application.ini中獲取參數,並使用它們使用PHP創建新連接。

<?php 
    $front = Zend_Controller_Front::getInstance(); 
    $bootstrap = $front->getParam('bootstrap'); 
    $options = $bootstrap->getOptions(); 
    $dbOptions = $options["resources"]["db"]["params"]; 

    $link = mysql_connect($dbOptions["host"], $dbOptions["username"], $dbOptions["password"]); 
    if (!$link) { 
     die('Verbindung schlug fehl: ' . mysql_error()); 
    } 
    mysql_select_db($dbOptions["dbname"]); 

    $ret = (mysql_query($query) === TRUE)? TRUE : mysql_error(); 

    mysql_close($link); 

    return $ret; 
    ?> 

這將返回TRUE或mysql錯誤。

1

可能遲到回答,但我有靈魂。 感謝@martynthewolf鏈接Zend的。兩個解決辦法,我發現:

$db->getConnection()->query($sql); // use getConnection() 

$db->exec($sql); 

這個問題是因爲內存堆棧大小。在Linux上,堆棧根據需要增長,但在Windows上,由於堆棧大小,此問題會冒泡。爲此,在php.net(這裏)中提出了一張票看看。請享用!!!