Я использую инструкцию mysqli в процедурных php ..... типы данных не работают - PullRequest
0 голосов
/ 16 июня 2020

Столбец test_int - это integer, однако, когда я выполняю запрос ниже, он показывает успешно. Интересно, как это может быть успешным, потому что я ввожу строку $id = "tett"; Я думаю, что он не должен выполнять запрос, потому что тип данных не соответствует.

<?php


include('db_connect.php');


// Prepare an insert statement
$sql = "INSERT INTO admin (test_int, username, password, maname) VALUES (?, ?, ?, ?)";

if($stmt = mysqli_prepare($con, $sql)){
    // Bind variables to the prepared statement as parameters
    mysqli_stmt_bind_param($stmt, "isss", $id, $username, $password, $maname);

    // Set parameters
    $id = "tett";
    $username = "New username";//$_REQUEST['first_name'];
    $password = "New password";//$_REQUEST['last_name'];
    $maname = "New Name";//$_REQUEST['email'];

    // Attempt to execute the prepared statement
    if(mysqli_stmt_execute($stmt)){
        echo "Records inserted successfully.";
    } else{
        echo "ERROR: Could not execute query: $sql. " . mysqli_error($con);
    }
} else{
    echo "ERROR: Could not prepare query: $sql. " . mysqli_error($con);
}

// Close statement
mysqli_stmt_close($stmt);

// Close connection
mysqli_close($con);

1 Ответ

1 голос
/ 16 июня 2020

Тип, который вы указываете в bind_param, сообщает PHP, как ему следует преобразовать значение. В 99,99% случаев вы должны преобразовать его как строку, чтобы не столкнуться с проблемами. Если вы приведете его как целое число, PHP выполнит обычное преобразование . Поскольку tett не может быть преобразовано в правильное число, PHP просто преобразует его в 0.

Кстати, вы должны не забыть включить отчеты об ошибках для mysqli. Поместите эту строку перед mysqli_connect():

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

Вы также можете упростить свой код, если удалите все ненужное.

<?php

include 'db_connect.php';

// Prepare an insert statement
$sql = "INSERT INTO admin (test_int, username, password, maname) VALUES (?, ?, ?, ?)";

$stmt = $con->prepare($sql);
// Bind variables to the prepared statement as parameters
$stmt->bind_param("ssss", $id, $username, $password, $maname);

// Set parameters
$id = "tett";
$username = "New username"; //$_REQUEST['first_name'];
$password = "New password"; //$_REQUEST['last_name'];
$maname = "New Name"; //$_REQUEST['email'];

// Attempt to execute the prepared statement
$stmt->execute();
echo "Records inserted successfully.";

Никогда не храните пароли в виде открытого текста или с помощью MD5 / SHA1! Сохраняйте только хэши паролей, созданные с помощью PHP password_hash(), которые затем можно проверить с помощью password_verify(). Взгляните на этот пост: Как использовать password_ha sh и узнайте больше о bcrypt и хешировании паролей в PHP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...