这个问题困扰着我。我有一个简单的mysqli查询,它成功地在db中插入数据,但也会在响应中抛出错误。
我知道我必须参数化查询等。这只是一个测试运行。
$query = "INSERT INTO user(user_id,subdomain) VALUES ('$user_id','$subdomain')";
$sql = mysqli_query($conn, $query);
执行时,我得到以下(格式化易读性)错误:
错误:1 INSERT INTO user(user_id,subdomain)VALUES(' abcdefgh | 123456',' abcd')您的SQL语法出错;检查与您的MySQL服务器版本相对应的手册,以便在#1;'附近使用正确的语法。在第1行
但是当我检查数据库时,数据已正确插入。
表格式如下:
user
Column Type Null Default
id (Primary) int(50) No
user_id varchar(50) No
subdomain varchar(30) No
modified timestamp No CURRENT_TIMESTAMP
关于这里发生了什么的任何想法?
编辑:添加更多代码
$host = 'localhost';
$user = 'root';
$pass = 'mysql';
$db = 'localauth0';
$conn = mysqli_connect($host, $user, $pass, $db);
mysqli_set_charset($conn, "utf8");
$user_id = mysqli_real_escape_string($conn, $_POST['user_id']);
$subdomain = mysqli_real_escape_string($conn, $_POST['storeSubdomain']);
// $query = "INSERT INTO user (user_id,subdomain) VALUES ('$user_id','$subdomain')";
$query = "INSERT INTO user(user_id,subdomain) VALUES ('".$user_id."','".$subdomain."')";
$sql = mysqli_query($conn, $query);
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $query . "<br>" . $conn->error;
}
$conn->close();
exit();
答案 0 :(得分:7)
这是你的问题:
$sql = mysqli_query($conn, $query);
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $query . "<br>" .$conn->error;
}
你两次调用mysqli_query,第一个插入记录:
$sql = mysqli_query($conn, $query);
第二次,它只是对字符串&#34; 1&#34;进行查询。但是然后你的错误报告连接错误的东西来报告问题。
怎么样
$result = mysqli_query($conn, $query);
if ($result) {
echo "New record created successfully";
} else {
echo "Error: " . . "<br>" . mysqli_error($conn);
}
答案 1 :(得分:0)
我想我明白了。您检查$conn->query($sql) === TRUE
但不是http://php.net/manual/de/mysqli.query.php
您的查询没有失败。只是你的if条件:)
更新:我错了。在我建议之前我真的应该阅读这些链接:
mysqli的:查询() 失败时返回FALSE。成功的SELECT,SHOW,DESCRIBE或 EXPLAIN查询mysqli_query()将返回一个mysqli_result对象。对于 其他成功的查询mysqli_query()将返回TRUE。
你有一个INSERT查询,所以大多数人都认为我的猜错了。