php - PHP 中的 INSERT 查询失败(返回空白错误)

标签 php mysql sql-insert

<分区>

我正在使用以下代码尝试在 <form> 中插入用户提供的值到一个sql表。在PHPMyAdmin中使用INSERT查询时,插入成功,但在下面的php.ini中不成功。连接数据库成功。

<?php
$servername = "localhost";
$username = "***";
$password = "***";
$db_name = "my_db";
$trip;
$odom;
$gals;
$ppg;

if (isset($_REQUEST['trip'])){

$trip = $_REQUEST['trip'];
$odom = $_REQUEST['odom'];
$gals = $_REQUEST['gals'];
$ppg = $_REQUEST['ppg'];

} 

// Create connection
$conn = mysqli_connect($servername, $username, $db_name, $password);

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully ";

在这里,我尝试在查询周围使用双引号来形成一个字符串;我也省略了引号,但无济于事。另外,在 VALUES 中,我尝试了单引号和省略,但都没有成功。变量是 double 值,而不是字符串。

 $vals = "INSERT INTO `Log` (`Trip`, `Odometer`, `Gallons_Pumped`,    
 `Price_Gallon`) 
 VALUES ('$trip', '$odom', '$gals', '$ppg')";

$retval的返回值是假的,但没有提供错误。

$retval = mysql_query($vals);

if ($retval) {
echo "New record created successfully";
} else {
echo "Error: " . $vals . "<br>" . $retval->error;
}

mysql_close($conn);

?>

我的语法不正确吗?如果不是,为什么INSERT查询不成功?

最佳答案

您将 mysqli_* 函数与 mysql_* 函数混合在一起。你不能那样做;它们不是同一个库。

仅使用mysqli_*。请don't use mysql_* ; mysql_* 函数已过时,deprecated ,没有安全感。使用 MySQLiPDO反而。

代码的最后一 block 应该是(未测试的):

$retval = mysqli_query($vals); // changed

if ($retval) {
    echo "New record created successfully";
} else {
    echo "Error: " . $vals . "<br>" . mysqli_error($conn); // changed
}

mysqli_close($conn); // changed

注意从 $retval->errormysqli_error($conn) 的变化。根据定义,如果您在代码中达到了这一点,那是因为 $retval 的计算结果为 false,因此它不是一个对象。


此外,请注意您对 SQL injection 持开放态度.你的 SQL 语句是这样的:

$vals = "INSERT INTO `Log` (`Trip`, `Odometer`, `Gallons_Pumped`, `Price_Gallon`)
VALUES ('$trip', '$odom', '$gals', '$ppg')";

但这些值($trip 等)直接来自用户(通过$_REQUEST)。如果您的用户提交包含例如 ' 字符的值,可能会发生非常糟糕的事情。你应该使用 prepared statements ,像这样:

$vals = "INSERT INTO `Log` (`Trip`, `Odometer`, `Gallons_Pumped`, `Price_Gallon`)
VALUES (?, ?, ?, ?)";

if($stmt = mysqli_prepare($conn, $vals)) {
    // adjust "sddd" below to match your data types; see http://php.net/manual/en/mysqli-stmt.bind-param.php
    mysqli_stmt_bind_param($stmt, "sddd", $trip, $odom, $gals, $ppg);

    $retval = mysqli_stmt_execute($stmt);
} else {
    echo "Error: " . $vals . "<br>" . mysqli_error($conn);
}

mysqli_close($conn);

关于php - PHP 中的 INSERT 查询失败(返回空白错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34823779/

相关文章:

php - 加入多个表和搜索参数

php - MySQL 大圆距离(Haversine 公式)

php - mysql组更新有多个where

php - 将 DOC 和 PDF 内容与 PHP 中的字符串进行匹配

sql - 当表本身存在外键约束时,postgresql 多次插入如何工作?

mysql - 仅当两列相同时才替换为

sql - t-sql插入-选择-带参数

php - 使用... openid 获取gmail 地址?授权?

php - 为什么 PHPExcel 不允许写入超过 5000 行

php - 使用 PHP curl 如何获取 400 响应的响应主体