【问题标题】:Insert into table doesnt work插入表格不起作用
【发布时间】:2014-10-26 13:47:07
【问题描述】:

我有这段代码,但我不能让它在我的 sql 表中插入任何东西? 回显部分工作正常..

/* We have succesfully resized and created thumbnail image
We can now output image to user's browser or store information in the database */       
$s_id = $_GET['id'];
$conn = mysqli_connect('localhost', 'user', 'pass', 'table');
$query = "INSERT INTO table ( sp_s-id, sp_thump, sp_orig ) VALUES 
( '$s_id', '$thumb_save_folder', '$image_save_folder' )";
//added $conn variable in order to connect to our database.
mysqli_query($conn, $query);
mysqli_close($conn);
echo '<div align="center">';

echo '<img src="uploads/'.$thumb_prefix . $new_file_name.'" >alt="Thumbnail">';
echo '<br />';
echo '<img src="uploads/'. $new_file_name.'" alt="Resized Image">';
echo $s_id;
echo '</div>';
imagedestroy($image_res); //freeup memory

【问题讨论】:

  • 这是连字符sp_s-id - SQL 将其翻译为“sp_s MINUS id” - 在列名周围使用反引号。将or die(mysqli_error($conn)) 添加到mysqli_query(),你就会明白我的意思了。另外,我希望table 不是真实姓名。如果是这样,也将其包裹在反引号中;这是一个保留字。
  • 你的专栏真的叫sp_thump而不是sp_thumb吗?
  • ^^^ 可能是一个错字,你永远不会知道。我不会为此给出答案。在 cmets 中保持安全。
  • @Fred-ii- 是的,这就是我问的原因。如果不是,那么这可能是他的插入不起作用的原因,以及您提到的原因。
  • @Ali 你很可能是对的。这就是为什么添加错误检查也会显示它是否是错误的原因。

标签: php mysqli insert


【解决方案1】:

替换这个:

$query = "INSERT INTO table ( sp_s-id, sp_thump, sp_orig ) VALUES 
    ( '$s_id', '$thumb_save_folder', '$image_save_folder' )";

有了这个:

$query = "INSERT INTO `table` ( `sp_s-id`, `sp_thump`, `sp_orig` ) VALUES 
    ( '$s_id', '$thumb_save_folder', '$image_save_folder' )";

SQL 服务器(以及 PHP 或大多数其他语言)无法处理带有减号 (-) 的列/表/变量名称,因此您需要将它们放入引号/引号中。强烈建议遵循 [_A-Za-z][0-9_A-Za-z]* 规则来获取列/表/变量名称(仅表示数字、字符 (A-Z) 和下划线,但不能以数字开头)。

此外,您应该始终验证或键入强制转换用户输入,如下所示(验证):

$s_id = $_GET['id'];
if (!is_numeric($s_id)) {
    // invalid input / possible hacking attempt?
}

或者这个(类型转换):

$s_id = (int) $_GET['id'];

【讨论】:

  • 欢迎您使用我在my comment 中所说的“为什么”它失败以及为什么 OP 不检查错误。
  • 答案由@Fred-ii-赞助
  • @Kypros 哈哈!好一个 :) 喜欢它。
  • @nicolaiolsen 在$s-id 中也有连字符。永远不要使用那些。使用下划线。 $s_id - PHP 也将其视为“减号”。
  • @Fred-ii- 抱歉“复制”您的答案,我没有看到它,您只是比我快。为您的初始评论 +1。
【解决方案2】:

你的语法错误。试试这个。

如果你不使用面向对象的模式,我建议使用 mysql 而不是 mysqli。

$conn = mysql_connect('localhost', 'username', 'password');
$db = mysql_select_db('databasename', $conn);



$query ="INSERT INTO tablename ( sp_s-id, sp_thump, sp_orig ) VALUES ( '{$s_id}', '{$thumb_save_folder}', '{$image_save_folder}' )";

$result = mysql_query($query);

mysql_close($conn);

试试这个。它应该插入到表中。在双引号中使用时,请确保将变量放在 {} 中。

【讨论】:

  • 他的语法很好。让你的 PHP 直截了当。 :P
  • @ali 我自 2011 年以来一直在使用 php,我至少知道这一点:p 我在谈论 xampp 和 db 声明并说“有时”也
  • 这会失败;彻底。列名 sp_s-id - OP 的其余代码都很好,甚至可能是 table,但不确定这是否是它的实际名称。
  • 我经常使用 xampp,但我不明白为什么 xampp 会成为问题。您使用的方式是正确的用法,您可以用大括号将变量包裹在双引号字符串中,但您也可以不使用大括号直接访问它们,所以他使用的没有错,您的答案不是他的问题的答案.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多