Php 添加多个sql查询的结果
我正在尝试添加3个SQL查询的结果。所有3个查询都返回整数值 如何将3个SQL查询的结果添加到一个变量中并回显它? 守则:Php 添加多个sql查询的结果,php,mysql,Php,Mysql,我正在尝试添加3个SQL查询的结果。所有3个查询都返回整数值 如何将3个SQL查询的结果添加到一个变量中并回显它? 守则: <?php define('HOST','mywebsite.com'); define('USER','username'); define('PASS','password'); define('DB','imagebase'); $con=mysqli_connect(HOST,USER,PASS,DB); if($_SERVER['REQUEST_METHOD
<?php
define('HOST','mywebsite.com');
define('USER','username');
define('PASS','password');
define('DB','imagebase');
$con=mysqli_connect(HOST,USER,PASS,DB);
if($_SERVER['REQUEST_METHOD']=='POST'){
$val1=$_POST['sval1'];
$val2=$_POST['sval2'];
$val3=$_POST['sval3'];
$sql="select price from images where name='$val1'"; //returns 100
$sql1="select price from images where name='$val2'"; //returns 100
$sql2="select price from images where name='$val3'"; //returns 100
$result=mysqli_query($con,$sql);
$count=mysqli_num_rows($result);
$result1=mysqli_query($con,$sql1);
$count1=mysqli_num_rows($result1);
$result2=mysqli_query($con,$sql2);
$count2=mysqli_num_rows($result2);
if ($count==1) {
$res1=$count;
}
if ($count1==1) {
$res2=$count;
}
if ($count2==1) {
$res3=$count;
}
$final=$res1+$res2+$res3; //should return 300 but returns 3
echo $final;
mysqli_close($con);
} else {
echo 'Error Updating Price';
mysqli_close($con);
}
?>
在if语句中,您忘记在第二个和第三个语句中将$count更改为$count1和$count2。 另外,是否确实要检查$count、$count1、$count2是否等于1? 您可能需要检查这些变量是否有falsy值,以及$count等是否存在错误。 在此之后,您需要在if语句之前将$res1、$res2、$res3初始化为0,否则可能会导致您在对之前由于falsy if语句而未初始化的$res变量求和时出错。相关警告代码易受SQL注入攻击!不要这样做。必须正确转义SQL文本中包含的任何潜在不安全值。首选的模式是使用带有绑定占位符的准备语句 为了解决被问到的特定问题:我们需要从resultset中获取行,并累积为price返回的值 看起来我们并不关心返回的行数;通过每个查询,所以实际上没有理由调用num_rows函数
$tot = 0;
$result=mysqli_query($con,$sql);
while( $row = $result->fetch_assoc() ) {
$tot += $row['price'];
}
$result1=mysqli_query($con,$sql1);
while( $row = $result1->fetch_assoc() ) {
$tot += $row['price'];
}
$result2=mysqli_query($con,$sql2);
while( $row = $result2->fetch_assoc() ) {
$tot += $row['price'];
}
echo "tot = " . $tot;
但是为什么要运行三个独立的查询呢?如果我们想要的是一个总数,我们可以让MySQL为我们计算
此外,面向对象模式比过程模式容易得多
$sql = 'SELECT SUM(i.price) AS tot_price
FROM images i
WHERE i.name IN ( ? , ? , ? )';
if( $sth = $con->prepare($sql) ) {
$sth->bind_param('sss',$val1,$val2,$val3);
if( $sth->execute() ) {
$sth->bind_result($tot_price);
if( $sth->fetch() ) {
echo "tot_price = " . $tot_price;
} else {
// no row returned
}
$sth->close();
} else {
// handle error in execute
} else {
// handle error in prepare
}
你还没有吗$最终=$res1+$res2+$res3;echo$final;在没有看到问题的情况下,很难回答这个问题。可能您只需要构造一个查询来返回总数。您可以使用一个查询来完成此操作。从名称位于?、?、?的图像中选择SUMprice?。此外,您还可能受到SQL注入攻击。阅读关于PDO-@ceejayoz的文章,但是它返回了3而不是3300@Melwin这是因为mysqli_num_rows返回查询结果中的行数,而不是实际结果。所以每次你调用它,它都返回1。在尝试添加查询之前,需要从查询中获取结果。或者,正如另一条评论所建议的,您可以在一个查询中获得所有三个。不管怎样,你都得去拿。mysqli_num_rows不会这么做。回答得好!我不知道你可以在mysqli语句中获取_assoc。我以为你得把绑定变量取出来。我想我对mysqli有点生疏了。@Don'tPanic。。我可能弄错了,我应该避免发布答案,包括mysqli。。。我更熟悉PDO。回答编辑是的,这里也是。在我回答的第一个代码块中,我添加了oo风格的调用,混合了OP原始过程调用。。。ACCCKKK。我需要更多的练习改变方向,从PDO切换到mysqli,从oo风格切换到过程风格。但出于良心,我绝对拒绝将任何遵循SQL注入模式的代码包括在内。