【问题标题】:PHP - How to Pass in Either POST Value or NULL Value (not NULL string) to a Stored ProcedurePHP - 如何将 POST 值或 NULL 值(不是 NULL 字符串)传递给存储过程
【发布时间】:2013-06-13 20:53:10
【问题描述】:

在我的页面上,我有几个文本框,其中两个,名字和姓氏,不是必需的。如果在这些字段中的一个或两个中没有输入任何内容,我需要将 NULL 插入为空,而不是 NULL 作为字符串值。目前它正在将它们作为字符串值输入。我需要做什么才能插入 NULL 值而不是字符串?

PHP 代码

<?php
// SQL connection and other variables...

if (!empty($_POST['firstname'])) {
    $firstname = $_POST['firstname'];
} else {
    $firstname = 'NULL';
}
if (!empty($_POST['lastname'])) {
    $lastname = $_POST['lastname'];
} else {
    $lastname = 'NULL';
}

$sp = "exec sp_test_proc '$street1', '$street2', '$firstname', '$lastname'";
$res = odbc_exec($conn, $sp);
?>

如果我为任何一个参数传入 NULL 而不是变量,它就可以正常工作。不确定是什么导致了使用变量的问题。

【问题讨论】:

  • 如果你只是做了$firstname = '';等等呢?
  • 如何使用准备好的语句来调用您的过程并将原始值 null 传递给它,而不是包含单词 NULL 的字符串。
  • @Fred 那么他会有一个空白字符串,而不是 NULL。
  • @Jessica 知道了。我想我有点难以理解这个问题。 3rd cup of coffee 还没有完全生效!

标签: php sql post stored-procedures odbc


【解决方案1】:

NULL而不是'NULL'

你正在使用引号将它变成一个字符串。

【讨论】:

  • 这是正确的,谢谢@Jessica 的帮助我真的很感激。
【解决方案2】:

您需要将 NULL 作为不带引号的字符串传递。这是因为您正在构建纯 SQL。 因此,请确保该声明是有效的。

对于参数化查询,它应该是 NULL 值而不是 NULL 字符串。

【讨论】:

  • 不要粗鲁,但你在说同样的话。对于普通 SQL 或带有参数的准备语句,您将使用 NULL 而不是 'NULL'
  • 我的意思是空值 = $var=null; 和空字符串 = $var='null';。但我同意没有格式化,因为它在手机中很难。
  • 它与格式无关 - 你说的是对普通 SQL 执行 X,对参数执行 X。我的观点是,他在做什么并不重要,因为两者都需要 X。因此,您的答案令人困惑。
猜你喜欢
  • 2011-02-13
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
  • 2010-12-17
相关资源
最近更新 更多