Tengo problemas con las consultas de inserción en una base de datos a la que estoy transfiriendo mi código. En primer lugar, tuve que cambiar todo, desde mysqli a PDO, que solucionó todos los problemas, excepto este.

He intentado usar declaraciones preparadas, he intentado codificar los valores de entrada. También he verificado que los permisos no son el problema, además, ¿supongo que eso devolvería un error?

Esta consulta siempre devuelve el éxito en todas las entradas, pero no ingresa nada en la base de datos, sin embargo, tengo una consulta de actualización escrita en el mismo script si encuentro una fila ya allí, así que sé que las variables se están rellenando.

Estoy perdido por lo que podría estar causando el problema

Aquí está el código:

$currKey = 1;

             foreach ($answer as $a)
            {
                $insertquery = "INSERT INTO table(userid, step_number, question_number, answer) VALUES ($userid, $stepNumber, $currKey, '$a')";

                if (!$stmt = $db->query($insertquery))
                {
                    $response = array();
                    $response["success"] = 0;
                    $response["message"] = "Error at insert query";
                }
                else
                {
                    $response = array();
                    $response["success"] = 1;
                    $resppnse["message"] = "success";

                    $currKey += 1;
                }
            }


            echo json_encode($response);
1
geolaw 8 mar. 2017 a las 13:16

2 respuestas

La mejor respuesta

Este es un tema múltiple y una persona probablemente nunca se tendrá a sí misma, pero con suerte esto le dará a las personas algunas cosas para considerar y mociones para pasar cuando trabajen con este tipo de situación.

Entonces, el primer problema importante es que mi editor de texto decidió ir a la huelga. Lo que significa que no importa lo que hice en un intento de depurar, no pasaba nada.

A continuación, una vez que me mudé a otra máquina para continuar con mi trabajo. Me las había arreglado para discernir que $rows = $stmt->fetchAll() siempre será> 0 pero devuelve un bool, a diferencia de $stmt->get_result->fetch_assoc() de mysqli que devuelve una matriz y, por lo tanto, puedo obtener un recuento. Me di cuenta de esto al darme cuenta de que mi consulta de inserción nunca se recibió (use mensajes de depuración buenos y descriptivos).

Después de eso cambié "INSERT INTO table(userid, step_number, question_number, answer) VALUES ($userid, $stepNumber, $currKey, '$a')"; a "INSERT INTO table(userid, step_number, question_number, answer) VALUES ('$userid', '$stepNumber', '$currKey', '$a')"; y ahí lo tenemos.

Gracias a todo lo que ayudó, han sido 2 días frustrantes.

1
geolaw 8 mar. 2017 a las 12:53

Entonces, para ejecutar una consulta de selección, necesita la función query(): PDO :: query

Y para realizar operaciones CUD, debe pasar por la función exec(): PDO :: exec

Así que aquí intenta cambiar if (!$stmt = $db->query($insertquery)) a if(!$results= $db->exec($insertquery))

1
Community 20 jun. 2020 a las 09:12