#php #mysql
#php #mysql
Вопрос:
я пытаюсь использовать запрос для вставки некоторых данных журнала в мою базу данных, которые мне понадобятся позже, когда кто-нибудь сменит свой пароль, но я не смог добавить запрос вставки я всегда получаю эту ошибку в заголовке вот мой код
$oldpw = $_POST['oldpw'];
$newpwd = $_POST['newpwd'];
$newpwd2 = $_POST['newpwd2'];
$username = LoggedUser()['Username'];
$qvars = [':User'=>$username,':oldpw'=>md5($oldpw)];
$qvars[':pass'] = md5($newpwd);
$insertuser = query("insert into SRO_VT_WEBSITE..TB_User (StrUserID,encrypted_password,old_password,new_password) values (:User,:oldpw,'$oldpw','$newpwd')", $qvars);
и это код файла conn и функции «query» внутри него
function Open($host, $user, $pass, $acc, $shd, $log)
{
global $conn;
global $array;
global $_allowSecretCode;
global $_secretCodeColumn;
$conn = new PDO("sqlsrv:server=$host;database=$acc", $user, $pass,[PDO::ATTR_TIMEOUT=>5]);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$array[] = $host;
$array[] = $user;
$array[] = $pass;
$array[] = $acc;
$array[] = $shd;
$array[] = $log;
if ($_allowSecretCode amp;amp; !ColExist($_secretCodeColumn, "TB_User", $array[3]))
$_allowSecretCode = false;
}
/* Execute a Query */
function query($query, array $args)
{
try {
global $conn;
$q = $conn->prepare($query);
$q->execute($args);
//_log("db.log", "QueryExecuted: " . $query . "n"); logging
} catch (PDOException $e) {
HandleException($e, $query);
} catch (Exception $e) {
HandleException($e, $query);
}
return $q;
}
Комментарии:
1. Я действительно рекомендую вам сделать это с помощью триггера.
2. Неясно, как связаны два блока кода. Пожалуйста, пересмотрите. Кроме того, почему вы параметрируете некоторые значения, но не все (т.Е.
:User,:oldpw,'$oldpw','$newpwd'
)?3.
Password=:pass , phone = '$newpwd' where StrUserID=:User
, и qvars содержит[':User'=>$username,':oldpw'=>md5($oldpw), ':pass'] => md5($newpwd)];
. Конечно, это не будет соответствовать.4. Кроме того, ваш запрос вставки завершится ошибкой, потому что вы передаете 4 значения в 6 столбцов.
5. Вам нужно передать только то, что вам нужно. Если в вашем запросе есть 2 заполнителя, то в вашем массиве должны быть только эти 2 пары заполнителей. Если у вас есть 4 заполнителя, то только эти 4 пары. Кроме того, не стоит смешивать заполнители и подобные значения. Измените переменные старого / нового пароля на заполнители и передайте их также в массив.
Ответ №1:
Вам нужно привязать параметры вашего запроса здесь:
$q = $conn->prepare($query);
$q->execute($args);
https://www.php.net/manual/en/mysqli-stmt.bind-param.php
https://www.php.net/manual/en/pdostatement.bindparam.php
Комментарии:
1. я получил «неопределенные переменные аргументы», функция находится в другом файле, как я уже упоминал, я изменил запрос на $query = «вставить в SRO_VT_WEBSITE..TB_User (StrUserID,encrypted_password,old_password,new_password) значения (:User,:oldpw,’$oldpw’,’$newpwd’)»; $q = $conn-> подготовить ($query); $q-> выполнить ($ args);