PHP存储过程在查询时出错


php stored procedure error while in query

代码:

<?php
    $sql = mysql_query($db, "CALL selectproducts()");
    if( $sql === FALSE ) {
        die('Query failed returning error: '. mysql_error());
    } else {
        while($row=mysql_fetch_array($sql))
        {
            $id=$row['prodname'];
            $name=$row['proddescription'];
            $desc=$row['prodsupplier'];
            $supp=$row['proddate'];
            $date=$row['prodprice'];
            $qtyleft=$row['prodquantity'];

得到这个错误:

Warning: mysql_query() expects parameter 2 to be resource, string given in C:'xampp'htdocs'inventory'tableedit.php on line 166
Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in C:'xampp'htdocs'inventory'tableedit.php on line 170

为什么它有错误,而事实上我在调用过程中没有参数?

应该是:

mysql_query("CALL selectproducts()", $db);

文档

请注意,mysql_函数现在已折旧。

试试这个方法:

<?php
$link = mysqli_init(); 
mysqli_options($link, MYSQLI_INIT_COMMAND, "SET AUTOCOMMIT=0"); 
mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, 5); 
mysqli_real_connect($link, $hostname, $username, $password, $dbName); 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s'n", mysqli_connect_error()); 
    exit(); 
} 
$query = "CALL simpleproc()"; 
if (mysqli_real_query($link,$query)) { 
    if ($result2 = mysqli_store_result($link)) { 
        while ($row = mysqli_fetch_assoc($result2)) { 
            $q = $row["login"]; 
            echo $q; 
        } 
    } 
} 
mysqli_close($link); 
?>

我相信你把mysql_query参数弄混了,其中$db是第二个参数,第一个是要执行的MySQL查询。

不过,为了将来的验证,你最好还是使用mysqli:

<?php
    $mysqli = new mysqli('username', 'username', 'password', 'database' );
    $result = $mysqli->query("CALL selectproducts()");
    if( !$result ) {
        die('Query failed returning error: '. $mysqli->connect_errno );
    } else {
        while( $row = $result->fetch_array(MYSQLI_ASSOC)) {
            $id       =  $row['prodname'];
            $name     =  $row['proddescription'];
            $desc     =  $row['prodsupplier'];
            $supp     =  $row['proddate'];
            $date     =  $row['prodprice'];
            $qtyleft  =  $row['prodquantity'];
        }
    }
?>

从检查mysqli PHP文档调用存储过程:

<?php 
    /**   
     *  Prepare Stored Procedure 
    **/
    if (!($result = $mysqli->prepare("CALL selectproducts()"))) {
        echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
    }
    if (!$result->execute()) {
        echo "Execute failed: (" . $result->errno . ") " . $result->error;
    }
    /**   
     *  Iterate through each result
    **/
    do {
        if ($res = $result->get_result()) {
            printf("---'n");
            var_dump(mysqli_fetch_all($res));
            mysqli_free_result($res);
        } else {
            if ($result->errno) {
                echo "Store failed: (" . $result->errno . ") " . $result->error;
            }
        }
    } while ($result->more_results() && $result->next_result());
?>