Tôi đang làm việc với drupal 7, trên PHP 7, trên XAMPP trên Windows, và đột nhiên tôi bắt đầu nhận được các lỗi sau:Gọi phương pháp xác định PDOStatement :: setFetchMode()
Call to undefined method DatabaseStatementBase::setFetchMode()
đâu DatabaseStatementBase kéo dài PDOStatement trực tiếp. Khi giảm mã xuống mức tối thiểu sau:
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', 'test', 'test');
$pdostatement = $dbh->prepare('SELECT * FROM items WHERE id=?');
$pdostatement->setFetchMode(PDO::FETCH_CLASS);
$success = $pdostatement->execute([1]);
// do stuff...
Nó vẫn phát sinh lỗi trên dòng liên quan đến setFetchMode. Khi tôi nhận xét rằng dòng ra, không có lỗi được ném, nhưng tôi nhận được một mảng kết hợp thay vì một đối tượng - không phải những gì drupal mong đợi. Đặc biệt vì setFetchMode nên tồn tại (xem http://php.net/manual/en/pdostatement.setfetchmode.php)
Cuối cùng, khi tôi cố gắng tìm các phương pháp phản chiếu sử dụng $pdostatement
, tôi lấy rác cho một số tên - hoặc chính xác hơn, tên có vẻ dài khoảng 1,5MB và chứa rất nhiều ký tự không đọc được và một số tên phương thức, như thể toàn bộ DLL được tải trong đó hoặc một cái gì đó. Dưới đây là một ví dụ về những gì var_dump
(php7 & Xdebug) làm cho nó:
object(ReflectionMethod)[17]
public 'name' => string '����&������p�aZ������������ ���bindParam�������{�nZ���������������setAttribute����f�kZ����������j����FETCH_ORI_FIRST�a�pZ���������q��
���CURSOR_SCROLL���l�}Z���������������fetchColumn������zZ��������������wph�����&��������Z���������������debugDumpParams���Z��������.�����children����������Z������������wphX����&��������Z��������(��
���nextrowset��������Z������������
���__toString������ ��Z������������wph(����&������4��Z��������'... (length=1752201104)
public 'class' => string 'PDOStatement' (length=12)
Làm thế nào tôi có thể sửa lỗi này?
Âm thanh lạ. Vui lòng giải thích về môi trường - phần mềm được sử dụng, phiên bản, v.v. Như một giải pháp bạn luôn có thể đặt chế độ tìm nạp mặc định hoặc sử dụng [fetchObject] (https://phpdelusions.net/pdo/objects#fetch) thay vì tìm nạp() –
bên cạnh đó, bạn không cần sự phản chiếu để tìm ra các phương thức, chỉ cần sử dụng get_class_methods() –
Ah, right, 'get_class_methods' yiels cùng một kết quả. Tuy nhiên, bằng cách sử dụng 'fetchObject' không phải là một giải pháp hợp lệ - hãy nhớ, tôi đang làm việc với drupal ở đây, tôi phải thay đổi một _lot_ của mã. Bên cạnh đó, sản xuất vẫn hoạt động. –