gpt4 book ai didi

mysql - 检查用户是否已经存在

转载 作者:行者123 更新时间:2023-11-29 12:22:06 25 4
gpt4 key购买 nike

我第一次在 stackoverflow 上发帖

我想如果 api 获取的 steamid 已存在于“steamID64”列中,则不执行任何操作。但如果没有,请在同一列中插入新的 steamid

这是我编码的内容:

<?php
if(isset($_SESSION['steamid'])) {

include ('steamauth/userInfo.php'); //access steam informations

$ID64 = $steamprofile['steamid'];


$link = mysql_connect('xxx','xxx', 'xxx', 'xxx');

$query = "SELECT steamID64 FROM Users WHERE steamID64=".$ID64;
$result = mysql_query($query, $link);
$rowcount = mysql_num_rows($result);

if($rowcount == 0)
{
$newUser = "INSERT INTO Users SET steamID64='$ID64'";
mysql_query($newUser, $link);
mysql_free_result($result);
else
{
echo "User already exist"; //only for debug purpose
}

mysql_close($link);
}
?>

问题是他运行了 else 但我的用户表是空的那么我哪里错了? 0_o

我知道这个问题已经被问过,但我已经尝试了我发现的所有内容

最佳答案

您可以尝试通过执行以下操作来查看查询是否实际运行或引发错误:

$query = "SELECT steamID64 FROM Users WHERE steamID64='".$ID64."'";
$result = mysql_query($query, $link) or die (mysql_error($link));
$rowcount = mysql_num_rows($result);

插入查询也是错误的,应该是:

$newUser = "INSERT INTO Users (steamID64)  VALUES ('".$ID64.'")";

无论如何,您应该尝试使用 PDO 或 Mysqli 准备好的语句来防止 SQL 注入(inject),因为 mysql_ 已弃用且不安全。

更新

在使用 mysqli_ 之前,请阅读 http://php.net/manual/en/book.mysqli.php 上的文档。

无论如何,使用 mysqli_ 你的代码将变成这样:

$ID64 = $steamprofile['steamid'];
$link=mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
$_selectQuery="SELECT steamID64 FROM Users WHERE steamID64=?";
$_select=$link->prepare($_selectQuery);
$_select->bind_param('s',$ID64);
if($_select->execute()) {
$_select->store_result();
$rowcount=$_select->num_rows;
if($rowcount==0) {
$_select->free_result();
$_insertQuery="INSERT INTO Users (steamID64) VALUES (?)";
$_insert=$link->prepare($_insertQuery);
$_insert->bind_param('s',$ID64);

if($_insert->execute()) {
//NEW RECORD INSERTED
} else {
echo $link->error;
}
$_insert->free_result();
} else {
//DUPLICATE ENTRY
}
} else {
echo $link->error;
}

附注我正在使用面向对象的 mysqli_ 函数

如果语句成功,

mysqli->execute() 返回 TRUE,否则返回 FALSE,但是无论如何,在 INSERT 的情况下, UPDATEDELETE mysqli 对象还将包含一个 affected_rows 属性,它表示受该语句影响的行数。< br/>因此,即使 execute 有效,您也可以检查实际插入了多少行。

关于mysql - 检查用户是否已经存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28851736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com