【问题标题】:sql query containing php variables does not work包含php变量的sql查询不起作用
【发布时间】:2013-04-29 22:14:21
【问题描述】:

谁能告诉我我的查询有什么问题? 我省略了 table_name 中的一些字段,因为我暂时不会使用它们,可能会在以后使用。

编辑: $FILTER_PARAMETERS = "$variable1 $variable2 $variable3...";

其中 $variable1 $variable2 $variable3... 是数字,我想将它们插入到用逗号分隔的同一个字段中,如下所示:

if (isset($_POST['variable1'])){
    $variable1= ($_POST['variable1'].', ');}

如果我回显 $FILTER_PARAMETERS = "$variable1 $variable2 $variable3... "; ,我明白了

1012、1025、1036、

就像我希望它位于 filter_parameters 字段内一样。

我的查询是这个:

$query = "INSERT INTO `database_name`.`table_name` (
`id` ,
`field1` ,
`field2` ,
`field3` ,
`field4` ,
`field5` ,
`field6` ,
`field7` ,
`field8` ,
`field9` ,
`field10` ,
`field11` ,
`field12` ,
`field13` ,
`field14` ,
`field15` ,
`field16` ,
`field17` ,
`field18` ,
`field19` ,
`field20` ,
`filter_parameters` ,
`field22` ,
`field23` ,
`field24`
) 

VALUES (NULL, '$field1', '$field2', '$field3', '$field4', '', '$field6', '', '', '$field9', '$field10', '$field11', '$field12', '$field13', '', '', '', '', '$field18', '$field19', '$field20', '$FILTER_PARAMETERS', '$field22', '$field23', '');";

此查询不会在数据库的任何字段中插入数据。有任何想法吗?谢谢。

编辑:

可能是 $FILTER_PARAMETERS 的问题?

【问题讨论】:

  • 那些变量$field1, $field2 ...是否填充了值?
  • 您没有在任何地方定义变量。因此它们都是空/空白。
  • 如果查询没有输入空白值,那么你一定会得到一些 sql 错误.. 你是否得到任何 sql 错误.. 检查日志可能
  • 总是echo你的查询当它没有按预期工作时。
  • 我通过 $_POST 发送值,定义变量 $field1, $field2 ... 并回显那些 $field1, $field2 ... 所以,它们不是空白的。

标签: php mysql variables sql-insert


【解决方案1】:

如果设置为自动递增,则省略 ID 字段。此外,您应该在 MySQL 中要使用 '' 填充的字段上保留默认值,而不是每次都通过查询运行它。如果您有一个值,则将其放在那里,如果您不打算更新或插入它,则将其保留。

$mysqli_conn = new mysqli($server_host, $user, $password, "database_name");

$mysqli_query = "INSERT INTO table_name (
`field1` ,
`field2` ,
`field3` ,
`field4` ,
`field6` ,
`field9` ,
`field10` ,
`field11` ,
`field12` ,
`field13` ,
`field18` ,
`field19` ,
`field20` ,
`field21` ,
`field22` ,
`field23` 
) 

VALUES ('$field1', '$field2', '$field3', '$field4', '$field6', '$field9', '$field10', '$field11', '$field12', '$field13', '$field18', '$field19', '$field20', '$field21', '$field22', '$field23')";

$mysqli_result_set = $mysqli_conn->query($mysqli_query);

【讨论】:

  • 删除了 id 和 NULL,并省略了不必要的字段和末尾的分号。还是不行
  • 您是否像我使用 $mysqli_conn 一样创建了连接,定义了要使用的数据库,并使用 $mysqli_result_set 和我演示的连接类查询函数执行语句?
  • 您使用原始代码发布的查询只是定义了一个字符串变量。它仍然需要由mysql的类来执行。
  • 数据库连接没有问题,我从数据库中提取数据并用于我要执行的查询。
  • 我代码中的这一行执行插入语句$mysqli_result_set = $mysqli_conn->query($mysqli_query);
【解决方案2】:

在查询结束时

22', '$field23', '');";

你没有正确关闭,通过这个来改变它:

22', '$field23', '')");

您缺少右括号 ) 并删除第一个分号 ; 只留下最后一个

编辑

这是您的查询,没有值和列

$query = "INSERT INTO `database_name`.`table_name` () VALUES ();";

只需去掉双引号内的分号:

$query = "INSERT INTO `database_name`.`table_name` () VALUES ()";

【讨论】:

  • 为什么您认为在此文本字符串的末尾会缺少右括号?
  • 额外的括号会产生错误。但是查询末尾的分号不应该在那里。
  • 如果我这样改变结尾会出错。我认为问题不在这里,因为我直接使用 phpMyAdmin 插入数据,并复制粘贴了查询。但还是不行。
  • 如果您将 id 列设置为 auto_increment 从列列表中删除 id 并从 VALUES 列表中删除 NULL
  • 对不起@Jocelyn 我没有意识到他使用了一个不必要的变量来设置他的查询
猜你喜欢
  • 2013-11-15
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 2016-10-05
相关资源
最近更新 更多