欢迎各位兄弟 发布技术文章
这里的技术是共享的
PDOException: in field_sql_storage_field_storage_write() (line 514 of /home/wwwroot/aaaaaa/public_html/modules/field/modules/field_sql_storage/field_sql_storage.module).
The website encountered an unexpected error. Please try again later.
PDOException: in field_sql_storage_field_storage_write() (line 448 of modules/field/modules/field_sql_storage/field_sql_storage.module)
I'm getting this error, as others have has indicated on: http://api.drupal.org/api/drupal/modules!field!modules!field_sql_storage...
The curious piece is that it works fine on my Fedora machine I use for local development, but when I run my simple update query on the production server that is on Dreamhost, I get this error. I wish the error was more descriptive. Here is the SQL that is causing it, just a simple update.
$query = db_update('field_data_field_theme_camp_description')->fields(array(
'field_theme_camp_description_value' => $des2 ));
$query
->condition('entity_id', $node->nid)
->execute();
我这边是不是由于网络限流引起的
详细解决办法 这是种方法,可以研究一下
// Execute the query if we have values to insert.
if ($do_insert) {
error_reporting(E_ALL);
ini_set("display_errors", "1"); // shows all errors
ini_set("display_start_errors", "1"); // shows all errors // "display_startup_errors"
ini_set("log_errors", "on");
ini_set("error_log", "php_errorccc.log");
var_dump("AAAA");
try{
$query->execute();
$revision_query->execute();
}
catch (Exception $e) {
var_dump($query);
var_dump("AAAAAAAAAAAAAAAAAA");
var_dump((string)$query);
$params = $query->getArguments();
var_dump("BBBBBBBBBBBBBBBBBBBB");
// 获取表名
$table_name = 'field_data_body';
// 获取字段名和占位符
$fields = $query->getField();
$placeholders = $query->getPlaceholder();
// 手动构建 SQL 查询
$sql = "INSERT INTO {$table_name} (" . implode(', ', array_keys($fields)) . ") VALUES (" . implode(', ', $placeholders) . ")";
// 将占位符替换为实际值
foreach ($query->getValues() as $placeholder => $value) {
// 使用 addslashes() 处理 SQL 特殊字符
$sql = str_replace($placeholder, "'" . addslashes($value) . "'", $sql);
}
var_dump($sql);
echo $e->getMessage();
// drupal_set_message($e->getMessage(),'error') ;
exit;
}
Solving the Emoji problem in Drupal 7
PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xF0\x9F\x98\x89" ...' for column 'body_value' at row 1: INSERT INTO {field_data_body} (entity_type, entity_id, revision_id, bundle, delta, language, body_value, body_summary, body_format) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8); Array ( [:db_insert_placeholder_0] => node [:db_insert_placeholder_1] => 538551 [:db_insert_placeholder_2] => 538550 [:db_insert_placeholder_3] => story [:db_insert_placeholder_4] => 0 [:db_insert_placeholder_5] => und [:db_insert_placeholder_6] => <p>????</p> [:db_insert_placeholder_7] => [:db_insert_placeholder_8] => filtered_html ) in field_sql_storage_field_storage_write() (line 514 of /drupal/modules/field/modules/field_sql_storage/field_sql_storage.module).
utf8mb4
utf8mb4
,并切换任何将存储表情符号或其他外来 UTF-8 字符的表列(Drupal 用语中的“fields”)。这将允许将这些特殊字符存储在数据库中,并停止 PDOException。
field_data_body
field_revision_body
field_data_body
以及相应的修订表), field_revision_body
然后单击 'Table info' 选项卡。body_value
body_summary
body_value
and body_summary
字段),选择 'Encoding' 列下的 “UTF-8 Unicode (utf8mb4)”。对于较大的数据集,这将需要一点时间。$databases = array(
'default' => array(
'default' => array(
'database' => 'database',
'username' => 'username',
'password' => 'password',
'host' => '127.0.0.1',
'driver' => 'mysql',
// Add default charset and collation for mb4 support.
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
),
),
);
来自 https://drupalsun.com/jeff-geerling/2015/07/21/solving-emoji-problem-drupal-7
下面的可以不看了
与引擎没有关系 ? 把 nginx 换作 nginx+apache 或换作 apache 都不行
来自 https://drupalsun.com/jeff-geerling/2015/07/21/solving-emoji-problem-drupal-7
遇到 Drupal 中的 PDOException,特别是在 field_sql_storage_field_storage_write()
函数中,通常意味着数据库操作时出现了问题。这可能是由于多种原因引起的,比如数据库连接问题、SQL 语句错误或是其他数据库层面的问题。
要解决这个问题,你可以按照以下步骤进行排查和修复:
检查错误日志:
查看 Drupal 的错误日志以及 web 服务器和数据库服务器的日志,寻找更详细的错误信息。
验证数据库连接设置:
确认 Drupal 的数据库连接配置是正确的。可以在 settings.php
文件中找到这些设置。
更新或重新安装模块:
如果你最近安装了新的模块或者更新了现有模块,尝试禁用它们看看问题是否仍然存在。
考虑重新安装 field_sql_storage
模块,或者更新到最新版本。
检查 SQL 语句:
PDOException 可能是因为执行的 SQL 语句有问题。检查相关的 SQL 语句是否有语法错误或者是否符合数据库的要求。
数据库维护:
运行一些基本的数据库维护任务,如优化表或修复表。
权限问题:
确保 Drupal 的数据库用户有足够的权限执行所需的数据库操作。
联系支持:
如果问题依旧无法解决,考虑联系 Drupal 社区或者查看官方文档获取更多帮助。
如果你能提供更具体的错误消息,我可以给出更加针对性的建议。
在 Drupal 中遇到 PDOException
通常与数据库操作有关,特别是在处理字段存储(如通过 field_sql_storage
模块)时。这个错误可能由多种原因引起,包括但不限于数据库连接问题、SQL 查询错误、数据库权限不足或数据不一致。以下是一些解决这个问题的步骤:
确保你的 Drupal 站点能够正确连接到数据库。检查 settings.php
文件中的数据库连接信息(如数据库名、用户名、密码和主机)是否正确无误。
PDOException
通常会包含一些有用的错误信息。在你的错误日志中查找完整的异常消息和堆栈跟踪,以获取更多关于错误原因的线索。
如果可能的话,查看引发异常的 SQL 查询。这可能需要你启用更详细的日志记录(如使用 dblog
模块或修改 settings.php
中的日志设置)。检查查询语法是否正确,以及所有涉及的表和字段是否存在于数据库中。
确保数据库用户有足够的权限来执行所需的数据库操作。这可能包括读写权限,以及可能需要的特定存储过程或函数的执行权限。
检查数据库中的表和字段是否完整且符合预期。有时,数据迁移或更新过程中可能会出现数据不一致的情况。
清除 Drupal 的缓存,有时可以解决一些看似复杂的问题。你可以通过 Drupal 的管理界面或使用 drush
命令(如果你安装了 Drush)来清除缓存。
确保你的 Drupal 核心和所有相关模块都是最新版本。有时候,这类问题可能是由已知的错误引起的,而这些错误在更新或修补中已经被修复。
如果问题仍然存在,考虑使用开发者工具(如 Xdebug)来跟踪代码执行过程,以便更准确地定位问题所在。
Drupal 的官方文档和社区论坛是获取帮助的好地方。可能有其他用户遇到了类似的问题,并分享了他们的解决方案。
如果你尝试了上述所有步骤仍然无法解决问题,可能需要寻求专业的帮助。这可能包括联系你的主机提供商或聘请 Drupal 专家。
通过这些步骤,你应该能够诊断并解决遇到的 PDOException
错误。如果问题仍然存在,可能需要更详细的调查来找出根本原因。
您遇到的 PDOException
问题出现在 Drupal 中,通常是与数据库操作相关的错误,特别是在保存字段数据时。以下是一些故障排除和解决问题的步骤:
检查错误详细信息:PDOException
通常会包含更具体的错误信息。查看日志文件(可以在 Drupal 网站的日志或服务器日志中找到)以识别根本问题。
数据库连接:确保数据库连接配置正确。检查 Drupal 安装中的 settings.php
文件(位于 sites/default
目录下),确认数据库凭据(用户名、密码、数据库名、主机)是否正确。
数据库架构:如果您最近添加或更改了字段,请确保数据库架构已完全更新。您可以通过运行 drush updatedb
或通过管理界面访问 /admin/reports/status
并检查是否有待处理的更新。
字段配置:检查导致问题的具体字段的配置。进入相关内容类型或实体类型,确认该字段的设置是否正确。
权限问题:有时,保存数据的问题可能是由于权限问题。检查用户角色是否具有编辑内容和字段的适当权限。
数据库完整性:使用 phpMyAdmin 或命令行工具检查数据库表是否存在任何问题。查看与字段存储相关的表是否损坏或缺失。
清除缓存:Drupal 严重依赖缓存,清除缓存有时可以解决与过时数据相关的问题。您可以使用 drush cr
或通过管理界面进行清除。
自定义代码:如果您有自定义模块或代码与字段交互,请确保代码中没有错误或问题,这可能导致问题发生。
日志分析:查看 Drupal 日志(访问 /admin/reports/dblog
)中是否有其他错误或警告,可能会提供更多上下文信息。
Drupal 版本:确保您使用的是一个活跃支持并且没有已知错误的 Drupal 版本,这些错误可能会影响字段存储。
备份和恢复:作为最后的手段,如果您无法确定问题,考虑从发生问题之前的备份中恢复数据库。
总之,由于 PDOException
通常指向数据库交互的问题,因此在故障排除时请重点关注数据库连接、架构、权限和字段配置。如果您能提供更多具体的错误信息,可能会进一步帮助您解决问题。
aaaaaaaaaaaaaa
Comments评论
Comment #1
DarrellDuane CreditAttribution: DarrellDuaneOk, Never mind, I see that I need to use
to see the error.
以查看错误。