Mysql插入查询不在php文件中工作

时间:2016-01-15 10:54:14

标签: php mysql mysqli prepared-statement

我是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')"; 

2 个答案:

答案 0 :(得分:4)

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

$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);

但即使这不是一个好的解决方案,因为你很容易受到sql注入的攻击。<​​/ p>

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

public class ContextWrapperFix extends ContextWrapper {
    private boolean editMode;

    public ContextWrapperFix(Context context, boolean editMode) {
        super(context);
        this.editMode = editMode;
    }

    public Object getSystemService(String name) {
        if (editMode && Context.AUDIO_SERVICE.equals(name)) {
            return null;
        }
        return super.getSystemService(name);
    }
}

预备语句将处理安全所需的所有转义和引用封装。

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

答案 1 :(得分:0)

如果user_mobile类型定义为int或其他数字类型,则不应使用&#39;。 所以你可以测试一下:

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