簡體   English   中英

PHP MySQL PDO SQLSTATE[HY000]:一般錯誤

[英]PHP MySQL PDO SQLSTATE[HY000]: General error

請幫助修復以下 PHP 腳本中的“SQLSTATE[HY000]:一般錯誤:”。 另外,請參閱 MySQL 腳本以防萬一。

<?php

# MySQL 
$host = 'localhost';
$username = 'root';
$password = '';
$dbname = 'procdb';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);

    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    echo "Connected to MySQL Server successfully." . "\n";

    $sql = "CALL prepend('abcdefg', @inOutParam);";
    $stmt = $pdo->query($sql);
    do {
        $rows = $stmt->fetchAll(PDO::FETCH_NUM);
        if ($rows) {
        foreach($rows as $row) {
              print($row[0] . "\n");
            }  
        }
    } while ($stmt->nextRowset());

} catch (PDOException $e) {
    #die("Could not connect to the database $dbname :" . $e->getMessage());
    $error = $e->getMessage();
    echo $error . "\n";
} catch (Exception $e) {
    $error = $e->getMessage();
    echo $error . "\n";
} finally {
    $pdo = null;
    echo "Connection closed." . "\n";
}   

?>

這是 MySQL 腳本:

DROP DATABASE IF EXISTS procdb;
DELIMITER $$
CREATE DATABASE procdb;$$
DELIMITER ;

USE procdb;
DROP PROCEDURE IF EXISTS prepend;
DELIMITER $$
CREATE PROCEDURE prepend
(
 IN inParam VARCHAR(255), 
 INOUT inOutParam INT
)
BEGIN
 DECLARE z INT;
 SET z = inOutParam + 1;
 SET inOutParam = z;
 SELECT inParam;
 SELECT CONCAT('zyxw', inParam);
END;$$
DELIMITER ;

USE procdb;
CALL prepend('abcdefg', @inOutParam);

/*
# Output 
// (FieldName1 and its value)
inParam
'abcdefg'
// (FieldName2 and its value)
CONCAT('zyxw', inParam)
'zyxwabcdefg'    
*/

錯誤的原因是什么? 注意添加“$stmt->close();” 或“$stmt->closeCursor();” 沒有幫助。

請幫忙。

謝謝

試試這個,行

 $rows = $stmt->fetchAll(PDO::FETCH_NUM);

外部 While 循環

try {
 $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 echo "Connected to MySQL Server successfully." . "\n";
 $sql = "CALL prepend('abcdefg', @inOutParam);";
 $stmt = $pdo->query($sql);
 $rows = $stmt->fetchAll(\PDO::FETCH_ASSOC);
 foreach ($rows as $row) {
    foreach ($row as $col) {
        print $col . "\n";
    }
 }
 $stmt->nextRowset();
 $rows = $stmt->fetchAll(\PDO::FETCH_ASSOC);
 foreach ($rows as $row) {
     foreach ($row as $col) {
        print $col . "\n";
    }
  }
 } catch (PDOException $e) {
   #die("Could not connect to the database $dbname :" . $e->getMessage());
   $error = $e->getMessage();
   echo $error . "\n";
 } catch (Exception $e) {
   $error = $e->getMessage();
   echo $error . "\n";
 } finally {
   $pdo = null;
   echo "Connection closed." . "\n";
 } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM