PHP ~ 列数与第 1 行的值数不匹配

Posted

技术标签:

【中文标题】PHP ~ 列数与第 1 行的值数不匹配【英文标题】:PHP ~ Column count doesn't match value count at row 1 【发布时间】:2017-06-21 06:21:28 【问题描述】:

我试图插入两个表但得到这个错误

错误:INSERT INTO provide_help (amount) VALUES (40,000.00) 列计数与第 1 行的值计数不匹配`

下面是我的插入代码

<?php

    session_start(); 



    //Include database connection details
    include('../../dbconnect.php');


$amount =  strip_tags($_POST['cat']);
$field1amount = $_POST['cat'];
$field2amount = $field1amount + ($field1amount*0.5);



$sql = "INSERT INTO provide_help (amount) VALUES ( $field1amount)";
if (mysqli_query($conn, $sql)) 


$sql = "INSERT INTO gh (ph_id, amount) VALUES (LAST_INSERT_ID(), $field2amount)";
if (mysqli_query($conn, $sql)) 

 
    $_SESSION['ph'] ="<center><div class='alert alert-success' role='alert'>Request Accepted.</div></center>";
   header("location: PH.php");
 else 
    echo "Error: " . $sql . "<br>" . mysqli_error($conn);


mysqli_close($conn);

?>

但是当我做这样的事情时它会起作用

$sql = "INSERT INTO provide_help (amount) VALUES ( $field2amount)";

我只是将$field1amount 更改为$field2amount

但我不希望这样,我还想获取 $field1amount 的值并插入它

如有任何帮助,将不胜感激,谢谢

【问题讨论】:

您对SQL Injections 持开放态度,应该真正使用Prepared Statements 而不是连接您的查询。特别是因为您根本没有逃避用户输入!这也可以解决您的逗号问题。 【参考方案1】:

问题是因为您传入的数字中有一个逗号,而不是字符串。您需要传入"40,000.00"40000.00。 MySQL 将其解释为两个值:40000.00

使用准备好的语句将缓解这种情况(以及您的安全问题),因为绑定会将40,000.00 解释为字符串。让您入门的一个非常基本的示例是:

$sql = "INSERT INTO provide_help (amount) VALUES (?)";
$stmt = $mysqli->prepare($sql);

/*
    - the "s" below means string
    - NOTE you should still validate the $_POST value,
      don't just accept whatever is sent through your form - 
      make sure it matches the format you're expecting at least
      or you'll have data validation issues later on
*/
$stmt->bindParam("s", $field1amount);
$stmt->execute($fieldAmount1);
$result = $res->fetch_assoc();

【讨论】:

我的建议实际上是尽可能使用 PDO。参见php.net/manual/en/pdo.connections.php 连接数据库,参见php.net/manual/en/pdo.prepared-statements.php 准备语句、绑定参数和执行查询。

以上是关于PHP ~ 列数与第 1 行的值数不匹配的主要内容,如果未能解决你的问题,请参考以下文章

列数与第 1 行 php mysql 的值计数不匹配

列计数与第 1 行的值计数不匹配 VendorError:1136

错误代码:1136。列数与第 1 行的值计数不匹配,我找不到错误

例外:尽管范围是从数据创建的,但数据中的列数与范围中的列数不匹配

异常:数据中的列数与范围内的列数不匹配

为啥叶子中的样本数与 DecisionTreeClassifier 的父节点中的值数不匹配?