mysqli_prepare语句失败

时间:2016-04-04 22:10:02

标签: php mysql mysqli

我有一个插入查询,我一直在我的网站上使用。工作得很好,我在这个网页上使用过来的查询但是在查询中添加了验证。 我现在运行了我的查询,我收到以下错误:

Undefined variable: run_query

$ run_query是我的mysqli_prepare变量的名称。我非常困惑,因为我不明白为什么我收到此错误,这似乎阻止了我的整个查询工作。

$add_product_errors = array();  
if (isset($_POST['Submit_addon'])) {             
    $item_name = $_POST['item_name'];
    $desc = $_POST['desc'];
    $price = $_POST['price'];
    // price validate - must be decimal(float)
    if (empty($_POST['price']) || !filter_var($_POST['price'], FILTER_VALIDATE_FLOAT) || ($_POST['price'] <= 0)) {
        $add_product_errors['price'] = "Please enter a product price";
    }
    // item name validate
    if (empty($_POST['item_name'])) {
        $add_product_errors['item_name'] = "Please enter a name";
    }
    // item name description
    if (empty($_POST['desc'])) {
        $add_product_errors['desc'] = "Please enter a product description";
    }
    //add to database
    //if (empty($add_product_errors)) {
    $query = "INSERT INTO Product (Product_Name,Product_Desc,Product_Price) VALUES (?,?,?) 
                ON DUPLICATE KEY 
                  UPDATE
                  Product_Name = VALUES(Product_Name)
                  ,Product_Desc = VALUES(Product_Desc)
                  ,Product_Price = VALUES(Product_Price)"; 
    $run_query = mysqli_prepare($dbc, $query);
    //debugging
    if (!$run_query) echo mysqli_stmt_error($run_query);
    mysqli_stmt_bind_param($run_query, 'sss', $item_name, $desc, $price);
    $execute = mysqli_stmt_execute($run_query);
    $item_name = strip_tags($_POST['item_name']);
    $desc = strip_tags($_POST['desc']);
    //100 - changes the way the decimal displays in database
    $price = strip_tags($_POST['price'] * 100);
    //execute the query
    if ($execute) {
        echo "<script> alert('Addrrss Saved')</script>";
    } else {
        echo "<b>Oops! we have an issue </b>";
    }
}
mysqli_stmt_close($run_query);

有人可以解释为什么我的mysql_prepare会失败。

1 个答案:

答案 0 :(得分:3)

放线:

mysqli_stmt_close($run_query);

if区块内。否则,在表单尚未发布且您未执行$run_query分配时执行该行。

此外,当if (!$run_query)成功并且您打印错误时,您应该退出脚本。否则,您将直接尝试执行查询的其余代码,即使准备失败也是如此。当参数不是语句时,你不能调用mysqli_stmt_error(),你需要调用mysqli_error()。将该行更改为:

if (!$run_query) {
    die(mysqli_error($dbc));
}