使用来自其他数据库的变量执行函数

Execute Function With Variables from Other DB

我正在尝试使用来自其他数据库的值执行函数。

我正在使用 Framework CakePHP 4.x 和 2 个数据库、Postgresql 和 MariaDB。

在Controller/Programscontroller.php:

use Cake\Datasource\ConnectionManager;

public function pro()
{    $connection = ConnectionManager::get('default');// Postgresql,in this one i have my function test(character varying,bigint,bigint)
     $connection2 = ConnectionManager::get('test');// MariaDB, in this one i want some variables
     $data = $connection2->execute('SELECT stuffs from stuff'); //My $data i want
      foreach ($data as $data) //I declare here 3 variables, to save some $data
    {  $w1=$data['cod_item']; 
       $w2=$data['fecha_solicitud_pago'];
       $w3=$data['monto_total'];
       $connection->execute('SELECT test(w1,w2,w3)');//here is my problem
      }    
}

我执行并出现错误 SQLSTATE[42703]:未定义第 7 列,不存在列 w1.How 是定义我的 3 个变量 w1、w2、w3 并在我的函数中使用它们的正确方法其他数据库。

我看到两个问题:

1. $connection->execute('SELECT test(w1,w2,w3)'); 没有使用 php 变量。应该是:

$connection->execute("SELECT test($w1,$w2,$w3)");

请注意,您必须使用双引号才能在字符串中使用变量。

2. 您必须以正确的形式使用函数。如果函数接收到(文本、日期、数字),您必须相应地发送它:

$connection->execute("SELECT test('$w1','$w2',$w3)");
// or, for more accuracy
$connection->execute("SELECT test('$w1'::text,'$w2'::date,$w3)");

当你做$connection->execute()时,你正在执行一个SQL语句,所以它必须写得很好。上述示例在 POSTGRESQL 中将被解释为:

SELECT test('asbd'::text,'2020-02-05'::date,39021)

假设 php 变量具有这些值。