将MySQL数据库值分配给PHP变量

时间:2014-03-20 00:26:43

标签: php mysql database variables assign

我有一个包含产品和价格的MySQL数据库表。 虽然是html表单,但我在某个php文件中获得了产品名称。 对于我想要做的文件中的操作,我还需要相应的价格。

对我来说,以下内容看起来很清楚:

$price = mysql_query("SELECT price FROM products WHERE product = '$product'");

然而,它的回声返回:

Resource id #5 

代替类似的值:

59.95

似乎还有其他选择 mysqli_fetch_assoc mysqli_fetch_array 但我不能让他们输出任何有意义的东西,我不知道使用哪一个。

提前致谢。

2 个答案:

答案 0 :(得分:13)

您需要从数据库中获取数据

$price = mysql_query("SELECT price FROM products WHERE product = '$product'");
$result = mysql_fetch_array($price);

现在您可以使用

进行打印
echo $result['price'];

作为旁注,我建议您切换为PDOmysqli,因为mysql_* api已被弃用,很快就会不再保留

答案 1 :(得分:2)

如果您阅读PHP.net上的手册(link),它会告诉您该做什么。

简而言之,您使用mysql_query执行查询(就像您一样),它返回Result-Resource。要真正获得结果,您需要在结果资源上执行mysql_fetch_arraymysql_fetch_assocmysql_fetch_object。像这样:

$res = mysql_query("SELECT something FROM somewhere"); // perform the query on the server
$result = mysql_fetch_array($res); // retrieve the result from the server and put it into the variable $result
echo $result['something']; // will print out the result you retrieved

请注意,您应该再使用mysql扩展名;它已被正式弃用。相反,您应该使用PDOMySQLi。 因此,执行相同过程的更好方法,但使用例如MySQLi扩展名将是:

$db = new mysqli($host, $username, $password, $database_name); // connect to the DB
$query = $db->prepare("SELECT price FROM items WHERE itemId=?"); // prepate a query
$query->bind_param('i', $productId); // binding parameters via a safer way than via direct insertion into the query. 'i' tells mysql that it should expect an integer.
$query->execute(); // actually perform the query
$result = $query->get_result(); // retrieve the result so it can be used inside PHP
$r = $result->fetch_array(MYSQLI_ASSOC); // bind the data from the first result row to $r
echo $r['price']; // will return the price

这更好的原因是它使用Prepared Statements。这是一种更安全的方法,因为它使SQL注入攻击变得不可能。想象某人是恶意用户并提供$itemId = "0; DROP TABLE items;"。使用您的原始方法,这将导致您的整个表被删除!使用MySQLi中准备好的查询,它将返回一个错误,指出$itemId is not an integer并且因此不会破坏您的脚本。