$ record не передает значение - PullRequest
       29

$ record не передает значение

0 голосов
/ 28 февраля 2019

После перехода на PHP7.1 "$ record" больше не записывает в БД.

Он все еще добавляет +1 к индексу, но не записывает фактическую информацию в файл namefile.dat.

namefile.dat разрешено 644, но файл все равно возвращается пустым, без данных.

if (!$db->open("../namefile"))    {
    $schema = array(
        array("key", FFDB_INT, "key"),
        array("nname", FFDB_STRING),
        array("desc", FFDB_STRING),
        array("daya", FFDB_INT),
        array("yeara", FFDB_INT)
        );
    // Try and create it...
    if (!$db->create("namefile", $schema))       {
        echo "Error creating database\n";
        return;
    }
}
$record["key"] = $data;
$record["nname"] = ucwords($datana);
$record["desc"] = $desc;
list($record["daya"]) = sscanf($daya, "%d"); // string -> int
list($record["yeara"]) = sscanf($yeara, "%d"); // string -> int

Есть идеи?Потому что я попытался изменить значение на $ _POST, чтобы заставить его ....

   $record["key"] = $_POST[$data];
   $record["nname"] = ucwords($_POST["$datana"]);
   $record["desc"] = $_POST["$desc"];
   list($record["daya"]) = sscanf($_POST["$daya", "%d"]);
   list($record["yeara"]) = sscanf($_POST["$yeara", "%d"]);

...., но все еще не смог записать значения в файл.

Есть предложения?

Спасибо

РЕДАКТИРОВАНИЕ

Журнал ошибок указывает на эти 2 функции -

 function read_byte($fp)     {
    return $this->bin2dec(fread($fp, 1), 1);
 }


function read_str($fp)     {
    $strlen = $this->bin2dec(fread($fp, 4), 4);
    return fread($fp, $strlen);
 }

ПРИМЕЧАНИЕ: bin2dec работает как bindec, без ошибок

1 Ответ

0 голосов
/ 28 февраля 2019

Метод bin2dec определяется как:

function bin2dec(&$str, $len)

Таким образом, первый параметр объявляется как ссылочная переменная.Это означает, что когда вы вызываете его, соответствующий аргумент должен быть переменной, которую можно обновить.Но он вызывается так:

  return $this->bin2dec(fread($fp, 4), 4);

Вы не можете использовать вызов функции в качестве аргумента, когда параметр функции является ссылочной переменной, так как для него нет ссылки для ссылки.

На самом деле нет причины, по которой первый аргумент bin2dec() должен быть ссылкой, поскольку функция никогда не изменяет его.Измените определение функции на:

function bin2dec($str, $len)

Кажется, что в FFDB много ненужных опорных переменных и параметров функции.Это довольно старый код (более 16 лет), возможно, в более ранних версиях PHP это было полезно для предотвращения ненужного копирования.PHP использует копирование при записи уже много лет, поэтому больше нет необходимости использовать ссылки для этой цели.

Я отредактировал ffdb.inc.php и заменил все &$ на $, кроме:

function add(&$record)

Похоже, что это необходимо для FFDB_INT_AUTOINC столбцов, которые изменяются на месте в $record при хранении.

После этого я не получил Only variables should be passed by reference ошибки.

...