php - 使用准备好的语句插入失败时出现 Errno(0)

标签 php mysql

我在使用准备好的语句将数据插入到带有 php 的表中时遇到错误,我被卡住了,因为它给了我 errno(0),我不知道那个错误是什么,你能帮我吗?谢谢!

<?php
session_start();
include '../conexion.php';

$nombre        = $_POST['Nombre'];
$apellido      = $_POST['Apellido'];
$mail          = $_POST['Mail'];
$telefono      = $_POST['Telefono'];
$ultimaventa   = $_POST['Numeroventa'];
$totalcomprado = 0;
$ultimomonto   = $_POST['Total'];
if($cons = $mysqli->prepare("select 1 from clientes WHERE Mail=?"));
$cons->bind_param('s',$mail);
$cons->execute();
$cons->store_result();

$existe=$cons->num_rows > 0;

if ($existe) {
    $totalcomprado=totalcomprado+$ultimomonto;
    if(!($cons=$mysqli->prepare("UPDATE clientes SET   nombre=?,apellido=?,Mail=?,telefono=?,ultimaventa=?,ultimomonto=?,totalcomprado= ? WHERE Mail=?"))){
        echo "fallo en la preparacion de la consulta:(".$mysqli->errno.")" .$mysqli->error;
    }
    $cons->bind_param('sssssiis',$nombre,$apellido,$mail,$telefono,$ultimaventa,$totalcomprado,$mail);
    if(!($cons->execute())){
        echo "fallo ejecutando la consulta:(".$mysqli->errno.")" .$mysqli->error;
    }
    $cons->close;

} else {
    $totalcomprado=$ultimomonto;
    if(!($cons=$mysqli->prepare("INSERT into clientes id,nombre,apellido,Mail,telefono,ultimaventa,ultimomonto,totalcomprado values(?,?,?,?,?,?,?)"))){
        echo "fallo en la preparacion de la consulta:(".$mysqli->errno.")" .$mysqli->error;
    }
    $cons->bind_param('sssssis',$nombre,$apellido,$mail,$telefono,$ultimaventa,$totalcomprado);
    if(!($cons->execute())){
        echo "fallo ejecutando la consulta:(".$mysqli->errno.")" .$mysqli->error;

    }
}

Ps.:插入的数据类型没问题,唯一的Integer是“ultimomonto”

这是错误:

fallo en la preparacion de la consulta:(0)
( ! ) Fatal error: Call to a member function bind_param() on a non-object in C:\wamp\www\mumushop\compras\verificar.php on line 35

最佳答案

您缺少 INSERT 语句中列名称周围的括号:

    if(!($cons=$mysqli->prepare("INSERT into clientes (id,nombre,apellido,Mail,telefono,ultimaventa,ultimomonto,totalcomprado) values(?,?,?,?,?,?,?)"))){

还有另一个与该错误无关的问题:

if($cons = $mysqli->prepare("select 1 from clientes WHERE Mail=?"));

; 结束此 if 语句,因此您不会使用它来根据是否成功执行任何操作。我认为您希望所有其余代码都在其中,因此应该是:

if($cons = $mysqli->prepare("select 1 from clientes WHERE Mail=?")) {
    $cons->bind_param('s',$mail);
    $cons->execute();
    $cons->store_result();

    $existe=$cons->num_rows > 0;

    if ($existe) {
        ...
    } else {
        ...
    }
}

未定义的常量错误来自此行:

$totalcomprado=totalcomprado+$ultimomonto;

您在 totalcomprado 之前缺少 $,它应该是:

$totalcomprado=$totalcomprado+$ultimomonto;

或者你可以将其写为:

$totalcomprado += $ultimomonto;

关于php - 使用准备好的语句插入失败时出现 Errno(0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28620830/

相关文章:

php - 如何在 Symfony 4 的 Twig 的 {{ dump() }} 中停用 Xdebug 转储数据的方法

mysql - 查询 MySQL 数据库 vs 读取静态文件

mysql - 用于连接 has_and_belongs_to_many 关系的 ActiveRecord 查询

php - Laravel 背包 $guarded 字段处理

php - Laravel Forge 使用守护进程长期运行的 Artisan 命令

php - 更新mysql表编码特殊字符

php - 使用 PHP 将图像添加到 mp3 文件的最佳方法?

php - 从 MySQL 中的 BLOB 读取 pdf 内容

php - PHP PDO 中的按钮

java - 从 DAO 类中的单个列表中的两个查询获取结果