Pregunta

Tengo una función que genera una instrucción INSERT preparada basada en una matriz asociativa de nombres y valores de columna para insertar en esa columna y un nombre de tabla (una cadena simple):

function insert ($param, $table) {
        $sqlString = "INSERT INTO $table (".implode(', ',array_keys($param)).') VALUES ('.str_repeat('?, ', (count($param) - 1)).'?)';
        if ($statement = $this->conn->prepare($sqlString)):
            $parameters = array_merge(array($this->bindParams($param), $param));
            call_user_func_array(array($statement, 'bind_param', $parameters));
            if (!$statement->execute()):
                die('Error! '.$statement->error());
            endif;
            $statement->close();
            return true;
        else:
            die("Could Not Run Statement");
        endif;
    }

Mi problema es que $ this- > conn- > prepare (es parte de una clase, conn es un NUEVO objeto mysqli, que funciona sin problemas) devuelve falso, ¡pero no me da una razón por la cual!

Aquí hay un ejemplo de $ sqlString que se crea para la instrucción de preparación:

INSERT INTO students (PhoneNumber, FirstName, MiddleInit, LastName, Email, Password, SignupType, Active, SignupDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)

¿Alguien puede ver un problema con esta declaración parametrizada? ¿Alguna razón por la cual la función de preparación devolvería falso?

¿Fue útil?

Solución

Estoy copiando la solución en esta respuesta para que se pueda dar un voto a favor, de lo contrario, la pregunta aparecerá en las "preguntas sin respuesta". Siempre. Estoy marcando esta respuesta en sentido horario para que no obtenga ningún punto.

@ Andrew E. dice:

  

Acabo de encender    mysqli_report (MYSQLI_REPORT_ALL) para   obtener una mejor comprensión de lo que era   pasando - resulta que uno de mis   los nombres de campo eran incorrectos : usted   piensa que prepare () arrojaría un   excepción, pero falla en silencio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top