Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带mariadb的存储过程php pdo-出错_Php_Mysql_Stored Procedures - Fatal编程技术网

带mariadb的存储过程php pdo-出错

带mariadb的存储过程php pdo-出错,php,mysql,stored-procedures,Php,Mysql,Stored Procedures,完整免责声明我以前从未弄乱过存储过程,但我对常规查询很在行。我没有从我创建的这个存储过程测试中得到任何结果,我知道有一些结果,因为我可以从“正常”查询中得到它们。我做错了什么 CREATE PROCEDURE get_snet( IN one VARCHAR(255), IN two VARCHAR(255) ) BEGIN SELECT IFNULL( (SELECT cats FROM results081219 WHERE url = @one L

完整免责声明我以前从未弄乱过存储过程,但我对常规查询很在行。我没有从我创建的这个存储过程测试中得到任何结果,我知道有一些结果,因为我可以从“正常”查询中得到它们。我做错了什么

CREATE PROCEDURE get_snet(
    IN one VARCHAR(255),
    IN two VARCHAR(255)
)

BEGIN
    SELECT
        IFNULL( (SELECT cats FROM results081219 WHERE url = @one LIMIT 1), '') AS cats1,
        IFNULL( (SELECT cats FROM results081219 WHERE url = @two LIMIT 1), '') AS cats2;
END
$$
DELIMITER ;
php:


另外,是否需要为存储过程中的字符串定义VARCHAR(xxx)?在我的普通查询中,由于该字符串是由php提供的,因此没有定义长度,我希望保持不变。

@one
用于mysql会话变量。它有它的用途

你需要做的是


这确实起到了作用,但当我在此之后执行查询时,我得到“致命错误:未捕获的PDOException:SQLSTATE[HY000]:一般错误:2014无法在其他未缓冲查询处于活动状态时执行查询。”现在。如果在发出下一次PDO::query()调用之前未获取结果集中的所有数据,你的电话可能会失败。调用PDOStatement::closeCursor()以释放与PDOStatement对象关联的数据库资源,然后再发出对PDO::query()的下一次调用。所以使用$stmt->closeCursor();在下一个pdo语句之前
$parsed1 = 'google.com';
$parsed2 = 'gmail.com';

//stored procedure way
$stmt = $dbnet->prepare("
    CALL get_snet(:parsed1, :parsed2);  
");

$binding = array(
    'parsed1' => $parsed1,
    'parsed2' => $parsed2
);
$stmt->execute($binding);

$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

echo "<pre>";
print_r($results);
echo "</pre>";
Array
(
    [0] => Array
        (
            [cats1] => 
            [cats2] => 
        )

)
CREATE PROCEDURE get_snet(
    IN one VARCHAR(255),
    IN two VARCHAR(255)
)

BEGIN
    SELECT
        IFNULL( (SELECT cats FROM results081219 WHERE url = one LIMIT 1), '') AS cats1,
        IFNULL( (SELECT cats FROM results081219 WHERE url = two LIMIT 1), '') AS cats2;
END
$$
DELIMITER ;