【问题标题】:Database Error. SQL query is not being executed [closed]数据库错误。 SQL查询没有被执行[关闭]
【发布时间】:2013-05-18 19:26:34
【问题描述】:

我有一个表单,它接受两个值作为输入,并使用 post 方法将它们解析到我有这段代码的下一个文件。这应该将这两个值保存在 MySQL 数据库中。但奇怪的是它没有..在我得到的输出错误中是这样的:0: 0:

$service_name = $_POST['service_name'];
$service_price = $_POST['service_price'];

$link = mysql_connect("localhost", "db_user", "pa$$");

mysql_select_db("database", $link);
echo mysql_errno($link) . ": " . mysql_error($link). "\n";

mysql_select_db("database", $link);
mysql_query("INSERT INTO service_tbl(id_service, service_name, service_price) VALUES(NULL,'$service_name','$service_price')", $link);
echo mysql_errno($link) . ": " . mysql_error($link) . "\n";

在我的数据库表 service_tbl 中,id_service 是 auto_increment,另外两列是 VARCHAR。我在这里做错了什么?

【问题讨论】:

  • 考虑使用mysqliPDO 而不是`mysql_*'。

标签: php mysql sql forms


【解决方案1】:

您试图在自动增量列中插入NULL,这是不可能的,只需更改为

mysql_query("INSERT INTO service_tbl( service_name, service_price)     VALUES('$service_name','$service_price')", $link);

那么我想记住你 mysql_ 函数已被弃用,所以我建议你切换到 mysqliPDO 确实你有sql injection的风险,看看这里How can I prevent SQL injection in PHP? .您应该使用准备好的陈述来避免任何风险

【讨论】:

  • 不起作用。仍然得到 0: 0: 作为输出! ://
  • @hossainahmedsaiman 试试echo $service_name;,它会打印什么?
  • 它打印解析的值好吗!
  • 我知道漏洞问题。但是 SQL 注入现在对我来说不是什么大问题。
  • @Hossainahmedsaiman 你检查数据没有插入你的表吗?
【解决方案2】:
mysql_query("INSERT INTO service_tbl( service_name, service_price)     VALUES('{$service_name}','{$service_price}')", $link);

因为Id_service 是自动递增的,所以你不能插入它。

【讨论】:

  • 不起作用。仍然得到 0: 0: 作为输出! ://
  • 检查你的mysql连接是否建立正确。 $link = mysql_connect("localhost", "db_user", "pa$$"); "pa$$" 可能会导致问题。
  • 检查你的mysql连接是否建立正确。 $link = mysql_connect("localhost", "db_user", "pa$$"); “pa$$” 可能会导致问题。使用 $link = mysql_connect("localhost", "db_user", "pa$$") 或 die("Unable to connect to MySQL");
  • 密码不完全是 'pa$$' 我只是在这里使用它!
  • @Hossain 如果存在连接问题或数据库选择问题,您可以轻松调试。将查询存储在变量中并打印变量也尝试显式运行查询。这肯定有助于解决您的问题。
【解决方案3】:

一些修改:

  1. 正如在其他答案/cmets 中已经说过的,不要使用已弃用的 mysql_* 函数。
  2. 无需为自动增量字段传递值。
  3. 将调试输出更改为真正的错误检查。
  4. 清理用户输入。

修改后的代码:

$service_name  = $_POST['service_name'];
$service_price = $_POST['service_price'];

$mysqli = new MySQLi('localhost', 'db_user', 'pa$$', 'database');
if ($mysqli->connect_errno) {
    throw new ErrorException("Failed to connect to MySQL: " . $mysqli->connect_error);
}

$query = sprintf("INSERT INTO service_tbl (service_name, service_price) VALUES ('%s', $f)",
    $mysqli->real_escape_string($service_name),
    (float)$service_name
);
// At this point, you can echo the query to test it in eg. phpMyAdmin
$result = $mysqli->query($query);
if ($result === false) {
    throw new ErrorException("Query failed: " . $mysqli->error);
}

printf("Select returned %d rows.\n", $result->num_rows);

while ($obj = $result->fetch_object()) {
    print_r($obj);
}

// Free result set
$result->close();

【讨论】:

    猜你喜欢
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    相关资源
    最近更新 更多