PHP MySQL插入查询不起作用,并且不显示任何错误消息

问题描述 投票:0回答:3

我已经验证了post方法实际上正在使用回显来显示变量,但是当我使用下面的Insert查询时,它不会添加行。

你有什么想法吗?

// 1. Create a DB connection
$connection =  mysql_connect("localhost","root","P@ssword");

if(!$connection){
    die("Database connection failed: " . mysql_error());    
}

$menu_name = $_POST['menu_name'];
$position = $_POST['position'];
$visible = $_POST['visible'];

$query = "INSERT INTO subjects (menu_name, position, visible) VALUES ('{$menu_name}', {$position}, {$visible})";

$result = mysql_query($query, $connection);

if ($result){
    header("Location:staff.php");
    exit;
} else {
echo "<p> There was an error when creating the
subject </p>";
"<p>". mysql_error()."</p>" ;

  }

mysql_close($connection);
php mysql forms insert-update
3个回答
2
投票

令人困惑的代码,哦!自从我的代码看起来像这样已经很长时间了。所以很难弄清楚,大声笑。但是,当涉及到mysql错误时-当某些东西不能正确地为我提供错误时(调试时看起来像这样)-我逐行阅读。然后,我回显查询,并使用mysqladmin或其他sql工具对其进行测试。我也会跑$ query = mysql_query($ query)或die(mysql_error());在同一行以进行快速调试。

重要问题

a)切换到mysqli以为将来的PHP更改做好准备。如果您喜欢mysql,请熟悉mysqli。

  1. 您未选择数据库。 mysql_select_db
  2. 重要这是发布数据-这意味着您确实需要过滤信息。为了允许使用插入内容将任何内容输入数据库,而又不逃避危险字符-您将需要大量操作;)。即使您是唯一输入信息的人我在下面做了些改动。您的单引号有'{$ menu_name}',但是没有单引号的{$ position}和{$ visible}-几个月后返回时,不一致会造成混淆。

为什么(({{menu_name}),{$ position},{$ visible})不是('{$ menu_name}','{$ position}','{$ visible}')吗?代替。

更有条理]
<?
$host = "localhost"; // hostname
$user = "root"; // username
$pass = "P@ssword"; // password
$db = ""; // database name

$connection = mysql_connect($host,$user,$pass) or die("Database connection failed: ".mysql_error());
$database = mysql_select_db($db,$connection) or die("DB Selection Error: ".mysql_error());

$menu_name = mysql_real_escape_string($_POST['menu_name']);
$position = mysql_real_escape_string($_POST['position']);
$visible = mysql_real_escape_string($_POST['visible']);

$query = "INSERT INTO `subjects` (`menu_name`, `position`, `visible`) VALUES ('{$menu_name}', '{$position}', '{$visible}')";

$result = mysql_query($query, $connection) or die(mysql_error());

if ($result){ // I would usually use mysql_insert_id as a validation from auto_increment tables.
    header("Location:staff.php");
    exit;
} else {
    echo "<p> There was an error when creating the subject </p>
    <p>". mysql_error()."</p>" ;
}
?>


1
投票

您没有选择数据库。


0
投票

您是否注意到您的值('{$menu_name}', {$position}, {$visible}),它们都应该像('{$menu_name}', '{$position}', '{$visible}')一样被引用。

© www.soinside.com 2019 - 2024. All rights reserved.