在 cakephp 中使用存储过程 3.x
Using stored procedures with cakephp 3.x
我正在尝试将 SQL 服务器存储过程与 cakephp 3.x 一起使用,但出现数据库错误。
这是我的控制器:
use Cake\Datasource\ConnectionManager;
if($this->request->is('post')){
$data = $this->request->getData();
$param1 = $data['playId'];
$param2 = $data['cardboard'];
if(is_numeric($param1) && is_numeric($param2)){
$param1 = $data['playId'];
$param2 = $data['cardboard'];
$conn = ConnectionManager::get('ssql');
$requested = $conn->query(
'call searchPrem(?, ?)',
[$param1, $param2]
)->fetchAll('assoc');
//$exec = debug($requested);
}
echo json_encode( $requested );
}
我收到这个 SQL 错误:
Error: SQLSTATE[42000]: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Incorrect syntax near '@P1'.
如何执行存储过程并检索结果数据?
在 Cake 2.x 中,我使用了如下解决方案:
if ($connection = $this->getDataSource()->connection) {
$statement = oci_parse($connection, "DECLARE x number; BEGIN :x := searchPrem(" . $var1 . ", " . $var2 . "); END;");
oci_bind_by_name($statement, ':x', $result, 10);
if (oci_execute($statement)) {
// Success
}
}
此示例适用于 Oracle 方言。您应该修改为 Cake 3.x 和您的数据库方言。
我找到了解决方案:
$conn = ConnectionManager::get('ssql');
$sql = $conn->execute("yourfunction @id = $playId, @type = $type")->fetchAll('assoc');
我正在尝试将 SQL 服务器存储过程与 cakephp 3.x 一起使用,但出现数据库错误。
这是我的控制器:
use Cake\Datasource\ConnectionManager;
if($this->request->is('post')){
$data = $this->request->getData();
$param1 = $data['playId'];
$param2 = $data['cardboard'];
if(is_numeric($param1) && is_numeric($param2)){
$param1 = $data['playId'];
$param2 = $data['cardboard'];
$conn = ConnectionManager::get('ssql');
$requested = $conn->query(
'call searchPrem(?, ?)',
[$param1, $param2]
)->fetchAll('assoc');
//$exec = debug($requested);
}
echo json_encode( $requested );
}
我收到这个 SQL 错误:
Error: SQLSTATE[42000]: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Incorrect syntax near '@P1'.
如何执行存储过程并检索结果数据?
在 Cake 2.x 中,我使用了如下解决方案:
if ($connection = $this->getDataSource()->connection) {
$statement = oci_parse($connection, "DECLARE x number; BEGIN :x := searchPrem(" . $var1 . ", " . $var2 . "); END;");
oci_bind_by_name($statement, ':x', $result, 10);
if (oci_execute($statement)) {
// Success
}
}
此示例适用于 Oracle 方言。您应该修改为 Cake 3.x 和您的数据库方言。
我找到了解决方案:
$conn = ConnectionManager::get('ssql');
$sql = $conn->execute("yourfunction @id = $playId, @type = $type")->fetchAll('assoc');