PHP/MYSQL使用名称从数据库获取用户id

PHP/MYSQL使用名称从数据库获取用户id,php,mysql,Php,Mysql,我找遍了所有地方,都找不到解决我问题的办法,所以我来了。我正在尝试从表单中获取用户的名称。我正试图从这个名称获取要发布到另一个表中的用户id。但当我这样做时,表中的值为“0” 代码如下: $to_name = trim($_POST['to_name']); $get_to_id = "SELECT user_id FROM users WHERE name = " . $to_name; $gti = mysql_query($get_to_id); if($gti) { $abc = my

我找遍了所有地方,都找不到解决我问题的办法,所以我来了。我正在尝试从表单中获取用户的名称。我正试图从这个名称获取要发布到另一个表中的用户id。但当我这样做时,表中的值为“0”

代码如下:

$to_name = trim($_POST['to_name']);

$get_to_id = "SELECT user_id FROM users WHERE name = " . $to_name;
$gti = mysql_query($get_to_id);
if($gti) {
$abc = mysql_fetch_array($gti);
$to_id = $abc['user_id'];
}
当我将它插入表中时,它不会显示用户id。任何帮助都会很好。提前感谢。

您不应该使用“mysql”查询`
$get_to_id = sprintf("SELECT user_id FROM users WHERE name = '%s' ",$to_name);
所有的
mysql.*
函数都已弃用——这意味着它很快将不包含在该语言中,并且您的代码将被破坏。向您提供的任何建议,包括使用
mysql\u query
函数,都是错误建议,因此应予以忽略

请参阅文档,并注意红色大警告:

改用PDO。设置起来很容易,你根本不需要改变很多东西

// note: untested code follows
$pdo = new PDO('mysql:host='.$host.';dbname='.$db_name, $db_username, $db_password);
$statement = $pdo->prepare('
    SELECT 
        user_id 
    FROM 
        `users` 
    WHERE 
        `name` = :name
');

$result = $statement->execute(array(
    'name'=>trim($_POST['to_name'])
));
$to_id = $result ? $statement->fetchColumn() : false;

// now, check for failure before moving on!
if (!$result || !$to_id){
    // tip: do something nicer than die to handle this failure.
    die('Error occurred'.implode(":",$pdo->errorInfo()));
}

// everything is ok, code continues....
文档

  • PDO::准备
    -
  • PDOStatement::execute
    -
  • PDOStatement::fetchColumn
    -
  • PDO::errorInfo
    -

首先
$to_name
应位于所有…,的引号第二位。。。。清理您的输入。您应该检查所有MySQL操作的错误。第三。。。不要使用不推荐的
mysql.*
函数。使用
mysqli
PDO
。您的查询失败了,您没有检查失败并假定成功,您的代码出错了,最终导致您出现在这里。永远不要假设你的查询成功了。总是假设失败,把成功当作一个惊喜。谢谢你,特里卡哈确实如此。当你获得足够的选票时,请投票给我的答案!这对防止SQL注入没有任何作用。它与直接连接字符串没有什么不同。考虑到这一点,这实际上比简单地连接字符串更糟糕,因为使用基本上无用的函数调用会产生错误的安全感。同样,这是不安全的,也不是好的做法。好吧,我在浏览网站时读到PDO只是连接到数据库,对吗?稍后在我的php页面中,我还可以执行if语句或while语句吗?@nikito2003 PDO是
mysql\uquot
函数的一个可能的替代品,可以说是最好的。它只是您应该使用的数据库访问方法,不会改变任何其他逻辑或代码实践。您所问的代码容易受到“sql注入”(研究发现!)的攻击,正确使用PDO有助于消除这种风险。否则,是的,您将一如既往地在代码中执行所有相同的操作。