PHP MySQLi插入不工作,没有错误

PHP MySQLi插入不工作,没有错误,php,mysqli,Php,Mysqli,与不同,但相似之处在于,在向数据库添加信息时,我不会出错 $sql = "INSERT INTO 'nlcc_ver1'.'tUsers' ('userID', 'userName', 'userPassword', 'userHash', 'user_first_name', 'user_last_name', 'user_corps', 'is_admin', 'is_trg', 'is_sup', 'is_co') VALUES (NULL, '" . $userName . "', '"

与不同,但相似之处在于,在向数据库添加信息时,我不会出错

$sql = "INSERT INTO 'nlcc_ver1'.'tUsers' ('userID', 'userName', 'userPassword', 'userHash',
'user_first_name', 'user_last_name', 'user_corps', 'is_admin', 'is_trg', 'is_sup', 'is_co')
VALUES (NULL, '" . $userName . "', '" . $hash . "', '" . $salt . "', '" . $f_name . "', '" .
$l_name . "', '" . $corps . "', '" . $admin . "', '" . $trg . "', '" . $sup . "', '" . $co . "')";
$hostname_Database = "localhost";
$database_Database = "nlcc_ver1";
$username_Database = "root";
$password_Database = "";
$mysqli = new mysqli($hostname_Database, $username_Database, $password_Database, $database_Database); 
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$result = $mysqli_query($mysqli, $sql);
echo "Query run. Inserted UserID " . mysqli_insert_id($mysqli) . "<br />";
$sql=“插入到'nlcc_ver1'。'tUsers'('userID','userName','userPassword','userHash',”,
‘用户名’、‘用户姓’、‘用户军团’、‘is管理员’、‘is培训’、‘is支持’、‘is公司’)
值(NULL、“$userName.”、“$hash.”、“$salt.”、“$f_name.”、“.”、“$hash.”。
“$l_name.”、“$corps.”、“$admin.”、“$trg.”、“$sup.”、“$co.”);
$hostname\u Database=“localhost”;
$database\u database=“nlcc\u ver1”;
$username\u Database=“root”;
$password_Database=“”;
$mysqli=newmysqli($hostname\u Database、$username\u Database、$password\u Database、$Database\u Database);
if(mysqli\u connect\u errno()){
printf(“连接失败:%s\n”,mysqli_Connect_error());
退出();
}
$result=$mysqli\u查询($mysqli,$sql);
回显“查询运行.插入的用户ID”。mysqli_insert_id($mysqli)。“
”;
插入换行符以避免横向滚动。。。它在网页上说mysqli_insert_id($mysqli)是0,并且没有向我的数据库表中添加任何内容。我没有看到连接到数据库时出现错误,MySQL正在我的服务器上运行,phpinfo()显示加载的MySQL和MySQLI扩展。这只是一台开发机器,所以不要担心安全性(即没有密码)。我试过用谷歌搜索这个问题,但没有发现太多。我不知道如何使用->进行面向对象的PHP编程,我习惯于使用。是否仍支持此方法

$mysqli_query($mysqli, $sql);
应该是

mysqli_query($mysqli, $sql);

后来

$mysqli->insert_id();
看看这个:

'nlcc_ver1'.'tUsers'
您必须在此处使用反勾号作为引号字符:

`nlcc_ver1`.`tUsers`

但是(假设$in$mysqli_查询只是一个输入错误):除非在执行查询后立即使用mysqli_error(),否则查询不会出错。

您混合了过程式和面向对象的mysqli样式。这导致您尝试使用
mysqli\u query($mysqli)
等函数,而不是
$mysqli->query()等成员函数。您的
$mysqli
是一个对象,而不是资源句柄

而且,您没有对查询执行任何错误检查。如果是,您会发现您错误地使用单引号来分隔表名和字段名,而不是反勾号

$sql = "INSERT INTO `nlcc_ver1`.`tUsers`
       (`userID`, `userName`, `userPassword`, `userHash`,
        `user_first_name`, `user_last_name`, `user_corps`,
        `is_admin`, `is_trg`, `is_sup`, `is_co`)
       VALUES (NULL, '" . $userName . "', '" . $hash . "', '" . $salt . "', '" .
               $f_name . "', '" . $l_name . "', '" . $corps . "', '" . $admin .
               "', '" . $trg . "', '" . $sup . "', '" . $co . "')";

$hostname_Database = "localhost";
$database_Database = "nlcc_ver1";
$username_Database = "root";
$password_Database = "";

$mysqli = new mysqli($hostname_Database, $username_Database, $password_Database, $database_Database); 
if (mysqli_connect_errno()) {
   printf("Connect failed: %s\n", mysqli_connect_error());
   exit();
}

$result = $mysqli->query($sql);
if (!$result) {
   printf("%s\n", $mysqli->error);
   exit();
}

echo "Query run. Inserted UserID " . $mysqli->insert_id . "<br />";
$sql=“插入'nlcc\u ver1'。`tUsers`
(`userID`、`userName`、`userPassword`、`userHash`、,
`用户名、`user\u last\u name`、`user\u corps`、,
`is_admin`、'is_trg`、'is_sup`、'is_co`)
值(NULL、“$userName.”、“$hash.”、“$salt.”、“$salt.”、“.”。
“$f_name.”、“$l_name.”、“$corps.”、“$admin。
“,”,“$trg。”,“$sup。”,“$co。”)”;
$hostname\u Database=“localhost”;
$database\u database=“nlcc\u ver1”;
$username\u Database=“root”;
$password_Database=“”;
$mysqli=newmysqli($hostname\u Database、$username\u Database、$password\u Database、$Database\u Database);
if(mysqli\u connect\u errno()){
printf(“连接失败:%s\n”,mysqli_Connect_error());
退出();
}
$result=$mysqli->query($sql);
如果(!$result){
printf(“%s\n”,$mysqli->error);
退出();
}
回显“查询运行.插入的用户ID”$mysqli->insert_id。“
”;

我强烈建议作为你的参考。在使用过程式或面向对象风格的MySQLi时,如何使用这些函数是非常清楚的。

在插入之前设置AutoCommit=1

$mysqli->query('SET AUTOCOMMIT = 1');

您不应该在连接后进行插入吗?您如何知道没有错误?您从未实际使用该查询检查过任何内容。@Tomalak:我已在Navicat中打开了数据库,并按了“刷新”按钮。没有change@CJBarone:嗯?什么是不变的?您仍然没有对查询执行任何错误检查的事实没有改变。@Tomalak我应该执行什么类型的错误检查?我有调试回音,每两行输出应该出现的内容,我有Navicat open显示我的tableno。他没有使用程序化的风格(至少不一致)。这很有效!你忘了用户名后有一个撇号被更改,我还不能编辑它。不过谢谢你:)真的吗?哪里很高兴你成功了;你明白其中的道理吗?不完全明白,但我正在阅读PDF来学习OOP。我上次使用PHP/MySQLi是几年前的版本4。我猜是这个changed@CJBarone:你应该给自己买一本像样的、最新的PHP书籍,而不是一些由一个在地下室的邋遢少年写的PDF格式的书!:)我以前从来没有用过反勾。。。我创建的所有其他PHP站点(我已经有几年没有使用PHP了)都使用了“和”。我在PHP中的OOP上下载了一个PDF,也许这可以解释更多的原因。它不需要引用表名之类的标识符,但是当你决定这样做时,唯一的引用字符是backtick。谢谢你的回答,但是这个项目已经死了很久了。谢谢你的帮助!
$mysqli->query('SET AUTOCOMMIT = 1');