【问题标题】:Mysql insert query isn't working in php file [closed]Mysql插入查询在php文件中不起作用[关闭]
【发布时间】:2016-04-20 22:52:10
【问题描述】:

我是 php 新手,并试图向我的数据库表中插入一些值,但是当我通过 php 变量传递值时,查询不起作用。相同的查询正在处理静态值。

我在 init.php 中建立我的数据库连接,其中的变量是 $dbc。

<?php
require "init.php";

$mobile = "100004";
$email = "vikas4@web";
$password = "4444"

$stmt = mysqli_prepare($dbc, "INSERT INTO user_login (user_mobile, user_email, user_pwd) values(?, ?, ?)";
mysqli_stmt_bind_param($stmt, "sss", $mobile, $email, $password);
echo "after sql_query";

?>

更多细节,当我用下面的静态代码替换我的 $sql_query 时,它正在插入到数据库中。

$sql_query = "INSERT INTO user_login (user_mobile, user_email, user_pwd) values('1000055', 'vikas55@web', '5555')"; 

【问题讨论】:

标签: php mysql mysqli prepared-statement


【解决方案1】:

你必须使用引号来插入字符串值

$sql_query = "INSERT INTO user_login (user_mobile, user_email, user_pwd) values('$mobile', '$email', '$password')";

但这也不是一个好的解决方案,因为您可能容易受到 sql 注入的攻击。

使用准备好的语句来避免这些安全问题:

$stmt = mysqli_prepare($dbc, "INSERT INTO user_login (user_mobile, user_email, user_pwd) values(?, ?, ?)";
mysqli_stmt_bind_param($stmt, "sss", $mobile, $email, $password);
mysqli_stmt_execute($stmt);

准备好的语句将处理所有必要的转义和引号封装以确保安全。

如果您想深入了解该主题,您可以在 http://www.w3schools.com/php/php_mysql_prepared_statements.asp 阅读不错的教程

【讨论】:

  • 引号版本是不好的做法。您的其他解决方案使用对象表示法,而 OP 使用功能库。这对初学者来说会很困惑。
  • 我用你的代码更新了我的主要帖子,但直到现在还没有工作。能否请您检查并提出问题的答案。 @GolezTrol
  • 请在我的示例中添加mysqli_stmt_execute()。实际执行sql语句是需要的。
  • 谢谢大家。它现在工作。我使用了准备好的语句,传递的值是参数。
【解决方案2】:

如果 user_mobile 类型定义为 int 或其他数值类型,则不应使用 '. 所以你可以测试一下:

$sql_query = "INSERT INTO user_login (user_mobile, user_email, user_pwd) values($mobile, '$email', '$password')";

【讨论】:

  • 这样做是非常糟糕的做法。与您类似的答案已被删除。如果您这样做,您还必须转义值中的引号和其他字符。顺便说一句,你所说的数值是不正确的。您可以在数值周围使用引号,MySQL 只会转换它。 “mobile”是否应该是数字是完全不同的问题。
猜你喜欢
  • 1970-01-01
  • 2012-09-14
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多