PHP/MYSQL使用名称从数据库获取用户id
我找遍了所有地方,都找不到解决我问题的办法,所以我来了。我正在尝试从表单中获取用户的名称。我正试图从这个名称获取要发布到另一个表中的用户id。但当我这样做时,表中的值为“0” 代码如下: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
$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有助于消除这种风险。否则,是的,您将一如既往地在代码中执行所有相同的操作。