MySql与PHP查询

MySql与PHP查询,php,mysql,Php,Mysql,我有个问题 我需要通过一个php查询从一个MySQL表中获取只知道播放器名称的播放器id 我的代码是: $user = $_POST['user_search']; $player_id = mysql_query("SELECT * FROM `".$prism_table_players."` WHERE player = '".$user."'"); $player_id_2 = mysql_fetch_array($player_id); $player_id_3 = $playe

我有个问题

我需要通过一个php查询从一个MySQL表中获取只知道播放器名称的播放器id

我的代码是:

$user = $_POST['user_search'];

$player_id = mysql_query("SELECT * FROM `".$prism_table_players."` WHERE player = '".$user."'");

$player_id_2 = mysql_fetch_array($player_id);

$player_id_3 = $player_id_2['player_id'];
我已经连接到MySQL数据库等。。。当我只有球员的名字时,我只需要得到球员的id

如果需要,表的结构如下所示:

player_id  player

3411       John 
4012       Mark
只有玩家时,我需要获得玩家id

例如,当我将播放器John作为html输入发送时,我需要获得3411

各位,这里是提取它的正确代码:

$player_id = mysql_query("SELECT * FROM `".$prism_table_players."` WHERE player = '".$user."'");

$player_id_2 = mysql_fetch_row($player_id);

$player_id_3 = $player_id_2['0'];
你可以用修剪来修剪

$user = trim($_POST['user_search']); 


首先,您的应用程序不安全。用户输入直接放入查询中,这允许用户销毁数据库。其次,您正在使用mysql_*函数-不建议使用mysqli_*或PDO。要从阵列中获取玩家id,您必须使用:

$user = $_POST['user_search'];

$player_id = mysql_query("SELECT * FROM `".$prism_table_players."` WHERE player = '".$user."'");

$player_id_2 = mysql_fetch_row($player_id);

$player_id_3 = $player_id_2[0];
如果您使用mysqli编写的语句会更好。

您真的不应该使用mysql_*函数-它们是。使用MySQLi或PDO连接;我个人更喜欢PDO,所以我将把它写成PDO:

//just to demonstrate the connection part:
$dbh = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME,DB_USER,DB_PASS);
//the important stuff
$stmt = $dbh->prepare("Select player_id from {$prism_table_players}
    WHERE player = :player");
$stmt->execute(array("player" => $_POST['user_search']));
$entry = $stmt->fetch(PDO::FETCH_ASSOC);
$player_id = $entry['player_id'];

您的查询似乎没有问题,但您需要与数据库表完全相同的用户名,因为该名称区分大小写。@AwladLiton:这取决于列的排序规则。列player\u id没有排序规则,列player实际上有as排序规则utf8\u general\u ci。_ci表示它不区分大小写:因此@AwladLiton的观点不正确。您是否验证了$user确实如预期的那样包含“John”?您是否验证过$prism_table_players确实包含您的表名?虽然我同意开头的一段,但为什么您认为使用mysql_fetch_行而不是mysql_fetch_数组会有任何区别?我不确定mysql_fetch_数组是否会返回$result[0]['column']或$result['column']当只有一行时。我读过,但仍然不确定,所以我认为只要玩家名称是唯一的,他就不需要超过一行,所以我使用mysql_fetch_行来回答会更安全。你认为仅仅切换到PDO会解决OP的问题吗?这会使它更安全,并给出适当的指示和排序该查询将是有效的,并返回给定名称的player_id。但是,你认为OP最初的疑问是什么导致它不起作用的呢?因为没有具体的问题,我只能说,但这是合理的,对我来说是一个巨大的进步
$user = $_POST['user_search'];

$player_id = mysql_query("SELECT * FROM `".$prism_table_players."` WHERE player = '".$user."'");

$player_id_2 = mysql_fetch_row($player_id);

$player_id_3 = $player_id_2[0];
//just to demonstrate the connection part:
$dbh = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME,DB_USER,DB_PASS);
//the important stuff
$stmt = $dbh->prepare("Select player_id from {$prism_table_players}
    WHERE player = :player");
$stmt->execute(array("player" => $_POST['user_search']));
$entry = $stmt->fetch(PDO::FETCH_ASSOC);
$player_id = $entry['player_id'];