欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

drupal 7 drupal7 d7 PDOException: in field_sql_storage_field_storage_write() modules/field/modules/field_sql_storage/field_sql_storage.module 有大用 有大大用 有大大大用

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.module
PDOException: 在 field_sql_storage_field_storage_write() 中(modules/field/modules/field_sql_storage.module 的第 448 行

PDOException: in field_sql_storage_field_storage_write() (line 448 of modules/field/modules/field_sql_storage/field_sql_storage.module)
PDOException: 在 field_sql_storage_field_storage_write() 中(modules/field/modules/field_sql_storage/field_sql_storage.module 的第 448 行)

I'm getting this error, as others have has indicated on: http://api.drupal.org/api/drupal/modules!field!modules!field_sql_storage...
我收到了这个错误,正如其他人在以下位置所指出的那样: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.
奇怪的是,它在我用于本地开发的 Fedora 计算机上运行良好,但是当我在 Dreamhost 上的生产服务器上运行简单的更新查询时,我收到了这个错误。 我希望这个错误能更详细地描述。 这是导致它的 SQL,只是一个简单的更新。

$query = db_update('field_data_field_theme_camp_description')->fields(array(
$query = db_update('field_data_field_theme_camp_description')->fields(array(

'field_theme_camp_description_value' => $des2 ));
'field_theme_camp_description_value' => $des 2 ));

$query$query
->condition('entity_id', $node->nid)
->condition('entity_id', $node->nid)

->execute();


我这边是不是由于网络限流引起的






Comments评论


DarrellDuane’s picture

Status: 地位:Active 积极» Closed (works as designed)
» 已关闭(按设计工作)

Ok, Never mind, I see that I need to use

/modules/field/modules/field_sql_storage/field_sql_storage.module 约 511行下面


好的,没关系,我看到我需要使用    简单决办法 
这是种方法,可以研究一下


try{
  $query->execute();}catch(Exception $e){  
  echo $e->getMessage();}

to see the error.
以查看错误。








 详细解决办法 这是种方法,可以研究一下
   // 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

解决 Drupal 7 中的 Emoji 问题   OK OOK  有大大用

On many Drupal 7 sites, I have encountered issues with Emoji (mostly) and other special characters (rarely) when importing content from social media feeds, during content migrations, and in other situations, so I finally decided to add a quick blog post about it.在许多 Drupal 7 网站上,我在从社交媒体源导入内容、内容迁移和其他情况下遇到表情符号(大多数)和其他特殊字符(很少)的问题,因此我最终决定添加一篇关于它的简短博客文章。

Have you ever noticed an error in your logs complaining about incorrect string values, with an emoji or other special character, like the following:您是否注意到日志中有一个错误,抱怨字符串值不正确,带有表情符号或其他特殊字符,如下所示:

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).

To fix this, you need to switch the affected MySQL table's encoding to utf8mb4, and also switch any table columns ('fields', in Drupal parlance) which will store Emojis or other exotic UTF-8 characters. This will allow these special characters to be stored in the database, and stop the PDOExceptions.要解决此问题,您需要将受影响的 MySQL 表的编码切换为 utf8mb4 ,并切换任何将存储表情符号或其他外来 UTF-8 字符的表列(Drupal 用语中的“fields”)。这将允许将这些特殊字符存储在数据库中,并停止 PDOException。

Using Sequel Pro on a Mac, this process is relatively quick and painless:在 Mac 上使用 Sequel Pro,此过程相对快速且轻松:

  1. 一) Open the affected tables (in the above case, 

    field_data_body

    , and the corresponding revision table, 

    field_revision_body

    ), and click on the 'Table info' tab.打开受影响的表(在上述情况下, field_data_body 以及相应的修订表), field_revision_body 然后单击 'Table info' 选项卡。
  2. 二) In the 'Encoding' menu, switch from "UTF-8 Unicode (utf8)" to "UTF-8 Unicode (utf8mb4)". This will take a little time for larger data sets.在“编码”菜单中,从“UTF-8 Unicode (utf8)”切换到“UTF-8 Unicode (utf8mb4)”。对于较大的数据集,这将需要一点时间。

见    /node-admin/21425    把utf8转为utf8mb4   

  1. 三) Switch over to the 'Structure' tab, and for each field which will be storing data (in our case, the 

    body_value

     and 

    body_summary

     fields), choose "UTF-8 Unicode (utf8mb4)" under the 'Encoding' column. This will take a little time for larger data sets.切换到 'Structure' 选项卡,对于将存储数据的每个字段(在本例中为 body_value and body_summary 字段),选择 'Encoding' 列下的 “UTF-8 Unicode (utf8mb4)”。对于较大的数据集,这将需要一点时间。

After converting the affected tables, you will also need to patch Drupal 7 to make sure the MySQL connection uses the correct encoding. Apply the latest patch from the issue Drupal 7 MySQL does not support full UTF-8, and add the following keys to your default database connection settings:转换受影响的表后,您还需要修补 Drupal 7 以确保 MySQL 连接使用正确的编码。应用问题 Drupal 7 MySQL 不支持完整 UTF-8 中的最新补丁,并将以下键添加到默认数据库连接设置中:四) 

$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',
    ),
  ),
);

That issue is actually a child issue of MySQL driver does not support full UTF-8, which has already been fixed in Drupal 8 (which now requires MySQL 5.5.3 or later as a result). It may take a little time for the problem to get an 'official' fix in Drupal 7, since it's a complicated problem that requires a delicate touch—we don't want a bunch of people's sites to go belly up because some contributed modules are using large VARCHAR columns, or because their hosting provider is running an old version of MySQL!该问题实际上是 MySQL 驱动程序不支持完整 UTF-8 的子问题,这已在 Drupal 8 中修复(因此现在需要 MySQL 5.5.3 或更高版本)。在 Drupal 7 中,该问题可能需要一点时间才能得到“官方”修复,因为这是一个复杂的问题,需要细致入微 — 我们不希望一堆人的网站因为一些贡献的模块使用大型 VARCHAR 列,或者因为他们的托管提供商正在运行旧版本的 MySQL!

There's also a handy table_converter module for Drupal 7, which helps you automate the process of converting tables to the new format. It still requires the core patch mentioned above, but it can help smooth out the process of actually converting the tables to the new format.Drupal 7 还有一个方便的 table_converter 模块,可以帮助你自动将表格转换为新格式。它仍然需要上面提到的核心补丁,但可以帮助顺利完成将表格转换为新格式的过程。

Once you've fixed the issue, you won't be quite as annoyed next time you see one of these guys: ????一旦你解决了这个问题,下次再看到这些家伙时就不会那么恼火了: ????


Original Post:  原帖: 


来自  https://drupalsun.com/jeff-geerling/2015/07/21/solving-emoji-problem-drupal-7

下面的可以不看了


与引擎没有关系 ?  把 nginx 换作 nginx+apache 或换作 apache 都不行


image.png


来自  https://drupalsun.com/jeff-geerling/2015/07/21/solving-emoji-problem-drupal-7  

遇到 Drupal 中的 PDOException,特别是在 field_sql_storage_field_storage_write() 函数中,通常意味着数据库操作时出现了问题。这可能是由于多种原因引起的,比如数据库连接问题、SQL 语句错误或是其他数据库层面的问题。

要解决这个问题,你可以按照以下步骤进行排查和修复:

  1. 检查错误日志

  • 查看 Drupal 的错误日志以及 web 服务器和数据库服务器的日志,寻找更详细的错误信息。

  • 验证数据库连接设置

    • 确认 Drupal 的数据库连接配置是正确的。可以在 settings.php 文件中找到这些设置。

  • 更新或重新安装模块

    • 如果你最近安装了新的模块或者更新了现有模块,尝试禁用它们看看问题是否仍然存在。

    • 考虑重新安装 field_sql_storage 模块,或者更新到最新版本。

  • 检查 SQL 语句

    • PDOException 可能是因为执行的 SQL 语句有问题。检查相关的 SQL 语句是否有语法错误或者是否符合数据库的要求。

  • 数据库维护

    • 运行一些基本的数据库维护任务,如优化表或修复表。

  • 权限问题

    • 确保 Drupal 的数据库用户有足够的权限执行所需的数据库操作。

  • 联系支持

    • 如果问题依旧无法解决,考虑联系 Drupal 社区或者查看官方文档获取更多帮助。

    如果你能提供更具体的错误消息,我可以给出更加针对性的建议。




    在 Drupal 中遇到 PDOException 通常与数据库操作有关,特别是在处理字段存储(如通过 field_sql_storage 模块)时。这个错误可能由多种原因引起,包括但不限于数据库连接问题、SQL 查询错误、数据库权限不足或数据不一致。以下是一些解决这个问题的步骤:

    1. 检查数据库连接

    确保你的 Drupal 站点能够正确连接到数据库。检查 settings.php 文件中的数据库连接信息(如数据库名、用户名、密码和主机)是否正确无误。

    2. 查看详细的错误信息

    PDOException 通常会包含一些有用的错误信息。在你的错误日志中查找完整的异常消息和堆栈跟踪,以获取更多关于错误原因的线索。

    3. 检查 SQL 查询

    如果可能的话,查看引发异常的 SQL 查询。这可能需要你启用更详细的日志记录(如使用 dblog 模块或修改 settings.php 中的日志设置)。检查查询语法是否正确,以及所有涉及的表和字段是否存在于数据库中。

    4. 数据库权限

    确保数据库用户有足够的权限来执行所需的数据库操作。这可能包括读写权限,以及可能需要的特定存储过程或函数的执行权限。

    5. 数据库一致性和完整性

    检查数据库中的表和字段是否完整且符合预期。有时,数据迁移或更新过程中可能会出现数据不一致的情况。

    6. 清理缓存

    清除 Drupal 的缓存,有时可以解决一些看似复杂的问题。你可以通过 Drupal 的管理界面或使用 drush 命令(如果你安装了 Drush)来清除缓存。

    7. 更新和修补

    确保你的 Drupal 核心和所有相关模块都是最新版本。有时候,这类问题可能是由已知的错误引起的,而这些错误在更新或修补中已经被修复。

    8. 使用开发者工具

    如果问题仍然存在,考虑使用开发者工具(如 Xdebug)来跟踪代码执行过程,以便更准确地定位问题所在。

    9. 查阅文档和社区资源

    Drupal 的官方文档和社区论坛是获取帮助的好地方。可能有其他用户遇到了类似的问题,并分享了他们的解决方案。

    10. 寻求专业帮助

    如果你尝试了上述所有步骤仍然无法解决问题,可能需要寻求专业的帮助。这可能包括联系你的主机提供商或聘请 Drupal 专家。

    通过这些步骤,你应该能够诊断并解决遇到的 PDOException 错误。如果问题仍然存在,可能需要更详细的调查来找出根本原因。




    您遇到的 PDOException 问题出现在 Drupal 中,通常是与数据库操作相关的错误,特别是在保存字段数据时。以下是一些故障排除和解决问题的步骤:

  1. 检查错误详细信息PDOException 通常会包含更具体的错误信息。查看日志文件(可以在 Drupal 网站的日志或服务器日志中找到)以识别根本问题。

  2. 数据库连接:确保数据库连接配置正确。检查 Drupal 安装中的 settings.php 文件(位于 sites/default 目录下),确认数据库凭据(用户名、密码、数据库名、主机)是否正确。

  3. 数据库架构:如果您最近添加或更改了字段,请确保数据库架构已完全更新。您可以通过运行 drush updatedb 或通过管理界面访问 /admin/reports/status 并检查是否有待处理的更新。

  4. 字段配置:检查导致问题的具体字段的配置。进入相关内容类型或实体类型,确认该字段的设置是否正确。

  5. 权限问题:有时,保存数据的问题可能是由于权限问题。检查用户角色是否具有编辑内容和字段的适当权限。

  6. 数据库完整性:使用 phpMyAdmin 或命令行工具检查数据库表是否存在任何问题。查看与字段存储相关的表是否损坏或缺失。

  7. 清除缓存:Drupal 严重依赖缓存,清除缓存有时可以解决与过时数据相关的问题。您可以使用 drush cr 或通过管理界面进行清除。

  8. 自定义代码:如果您有自定义模块或代码与字段交互,请确保代码中没有错误或问题,这可能导致问题发生。

  9. 日志分析:查看 Drupal 日志(访问 /admin/reports/dblog)中是否有其他错误或警告,可能会提供更多上下文信息。

  10. Drupal 版本:确保您使用的是一个活跃支持并且没有已知错误的 Drupal 版本,这些错误可能会影响字段存储。

  11. 备份和恢复:作为最后的手段,如果您无法确定问题,考虑从发生问题之前的备份中恢复数据库。

总之,由于 PDOException 通常指向数据库交互的问题,因此在故障排除时请重点关注数据库连接、架构、权限和字段配置。如果您能提供更多具体的错误信息,可能会进一步帮助您解决问题。








aaaaaaaaaaaaaa

普通分类: