gpt4 book ai didi

mysql - SQL 查询无法插入相同的列数,插入的列较少

转载 作者:行者123 更新时间:2023-11-30 23:59:29 24 4
gpt4 key购买 nike

在此处的示例中,NULL 值通常是我传递的其他变量。我试图传递 NULL 以查看是否是问题所在,因为这些是唯一可以为 NULL 的值,其他所有值都是必需的。

mysql_query("INSERT INTO `imstillr_crm`.`customerinfo` 
(`id`, `companyname`, `primarycontact`, `primaryemail`,
`prefphone`, `secondarycontact`, `secondaryemail`, `optionalphone`,
`department`, `website`)
VALUES
(NULL, '".$company."', '".$primarycontact."', '".$primaryemail."',
'".$prefphone."', 'NULL', 'NULL', 'NULL,
'".$department."', '".$website."')");

我只是用更少的变量尝试了这个并且成功了。我有点困惑。我什至插入了一条记录并复制了 SQL 字符串并添加了我的变量。

最佳答案

我认为你在这里犯了一个错误:

'NULL, '".$department.

大概是你想要的

'NULL', ".$department."

但是:这看起来好像您正试图将文字文本“NULL”插入到您的数据库中,我认为这不是您想要的。 NULL 是一个关键字,因此您可以在插入 null 值的任何地方使用裸词 NULL(因此不需要引号)。

还有更多,冒着分散您当前问题的注意力的风险,您真的不应该像现在这样通过组合字符串来执行 SQL 语句。这就是 SQL 注入(inject)攻击成功的方式。更好的方法是将 PDO 与准备好的语句一起使用。以下是如何使用它的简要说明:

http://www.php.net/manual/en/pdo.prepared-statements.php

主要优点是:

  1. 您删除了由 mysql_* 函数创建的对 Mysql 的显式依赖
  2. 您可以避免 SQL 注入(inject)攻击。
  3. 没有复杂的字符串组合,您的代码应该更易于阅读

只是为了完整起见,这里是你的代码在 PDO 下的样子

$stmt = $dbh->prepare("INSERT INTO imstillr_crm.customerinfo (id, companyname, primarycontact, primaryemail, prefphone, secondarycontact, secondaryemail, optionalphone, department, website) VALUES (:id, :companyname, :primarycontact, :primaryemail, :prefphone, :secondarycontact, :secondaryemail, :optionalphone, :department, :website)");
$stmt->bindParam(":id", NULL);
$stmt->bindParam(":companyname", $company);
$stmt->bindParam(":primarycontact", $primarycontact);

...

$stmt->execute();

请注意如何不需要在值周围加上引号。它们可能包含各种字符,例如引号、分号等,这些不会在您的数据库中引起任何问题(它们可能会在您的应用程序的其他地方引起问题,但这是另一个讨论)。

关于mysql - SQL 查询无法插入相同的列数,插入的列较少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5315351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com