我使用db adapter
在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中执行相同的语句没有问题。 (db字段是文本)
当我使用
时$adapter->exec($q);
查询也可以。
现在我的问题:
导致query()语句出现问题的原因是什么?
使用exec()是否有任何缺点?
答案 0 :(得分:2)
如果您更改插入以使用面向对象的界面来逃避您的输入数据,那么您是否还有问题?
$values = array('category_id' => $category_id,
'user_id' => $user_id,
'text' => $question_text,
'active' => 1);
$inserted = $adapter->insert('questions', $values);
$inserted
应包含受操作影响的行数,1。
答案 1 :(得分:2)
当我尝试将PDF插入BLOB时,我遇到了同样的错误。 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-error。
答案 2 :(得分:1)
可能要迟到才能回答,但我有灵魂。感谢@martynthewolf链接。我找到了两个zend解决方案:
$db->getConnection()->query($sql); // use getConnection()
$db->exec($sql);
此问题是由于内存堆栈大小。在Linux上,堆栈会根据需要增长,但在Windows和&amp;由于堆栈大小,Mac此问题会冒泡。为此,在php.net(这里)提出了一张票。看看。享受!!!