PHP-MySQL函数

PHP-MySQL函数,php,mysql,Php,Mysql,我编写了一个PHP函数,但在特定点上它什么也不做。。我是新来php的,我的英语很差,很抱歉 <?php function SQLwriteRecent($id, $title, $link) { $con=mysqli_connect("localhost","","",""); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " .

我编写了一个PHP函数,但在特定点上它什么也不做。。我是新来php的,我的英语很差,很抱歉

<?php
function SQLwriteRecent($id, $title, $link) {
    $con=mysqli_connect("localhost","","","");
    // Check connection
    if (mysqli_connect_errno()) {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    $count = mysqli_query($con,"SELECT count FROM recent WHERE sc_stream='$id'");

   if(!isset($count)) {
        try {
            mysqli_query($con,"INSERT INTO recent (title, link, sc_stream, count) VALUES ('$title', '$link', '$id',$count)");
            mysqli_close($con);
            return 1;
        } catch(Exception $e) {
            return 0;
        }
    } else {
        try {
            // ------ SHOW HERE!!!! ------------ //
            mysqli_query($con,"UPDATE recent SET count=$count WHERE sc_stream='$id'");
            mysqli_close($con);
            return 2;
        } catch(Exception $e) {
            return 0;            
        }       
    }


}
?>

您在此处出错,查询返回数组
试试这个


您在这里犯了一个错误,查询返回数组 试试这个


您的脚本不会插入新行,因为您已经定义了$count,它是一个mysqli\u结果对象。你必须检查是否有争吵,你可以这样做

而不是

if(!isset($count))
使用


您的脚本不会插入新行,因为您已经定义了$count,它是一个mysqli\u结果对象。你必须检查是否有争吵,你可以这样做

而不是

if(!isset($count))
使用

您已设置:

count=$count

但是

$count=mysqli\u查询($con,“从最近的地方选择count,其中sc\u流=“$id”)

为已设置的非资源计数指定一个正确的值:

count=$count

但是

$count=mysqli\u查询($con,“从最近的地方选择count,其中sc\u流=“$id”)

为计数而非资源指定适当的值

一些说明:

您的代码中包含以下内容:

if(!isset($count)) {
这将检查您的变量是否已设置,
是否为空
是否为假
0
。此条件始终返回
true
,因为变量是在前面的行中设置的,请使用
mysqli\u nuw\u rows
代替一些说明:

您的代码中包含以下内容:

if(!isset($count)) {

这将检查您的变量是否已设置,
是否为空
是否为假
0
。此条件始终返回
true
,因为变量是在前面的行中设置的,所以使用
mysqli\u nuw\u rows
来检索查询的实际结果,您必须执行以下操作

if ( $result = $con->query($sql)){ //perform the query
    if ($result->num_rows == 1){
        if ($row = $result->fetch_assoc()){
            $count = $row['count'];
        } 
        else{
          echo "couldn't fetch result row";
    }
    else {
        echo "expected one result row, got ".$result->num_rows;
    }
}
else {
    echo "query failed:".$sql;
    echo $con->errno.' '.$con->error;
}
//如果有多个结果行

if ( $result = $con->query($sql))
  while ($row = $result->fetch_assoc()){ //loop through the result(s)
     $count = $row['count']
  }
//程序风格

if ( $result = mysqli_query($con,$sql))
   while($row = mysqli_fetch_assoc($result)){

要检索查询的实际结果,必须执行以下操作

if ( $result = $con->query($sql)){ //perform the query
    if ($result->num_rows == 1){
        if ($row = $result->fetch_assoc()){
            $count = $row['count'];
        } 
        else{
          echo "couldn't fetch result row";
    }
    else {
        echo "expected one result row, got ".$result->num_rows;
    }
}
else {
    echo "query failed:".$sql;
    echo $con->errno.' '.$con->error;
}
//如果有多个结果行

if ( $result = $con->query($sql))
  while ($row = $result->fetch_assoc()){ //loop through the result(s)
     $count = $row['count']
  }
//程序风格

if ( $result = mysqli_query($con,$sql))
   while($row = mysqli_fetch_assoc($result)){

结合其他人所说的,再看看你所做的事情的逻辑,你似乎有几个基本问题:

我已经调整了一些变量名,以便更清楚地了解您得到了什么,并在代码中添加了描述问题的注释

我忽略了SQL注入问题

<?php

function SQLwriteRecent($id, $title, $link) {

    $con=mysqli_connect("localhost","","","");

    // Check connection
    if (mysqli_connect_errno()) {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    $countQuery = mysqli_query($con,"SELECT count FROM recent WHERE sc_stream='$id'");

    $numberOfRowsReturnedByQuery = mysqli_num_rows($count);

    if ( $numberOfRowsReturnedByQuery > 0 ) {
        $valueOfCountInQuery = $countQuery [0]['count'];
    }

    if( $numberOfRowsReturnedByQuery == 0) {
        try {

            // In this situation it looks like you want to set up a value in "recent" - I.E. you didn't have a record.
            // But think about it for a second - if you had no record in "recent" then how could "$valueOfCountInQuery" possibly be set?

            mysqli_query($con,"INSERT INTO recent (title, link, sc_stream, count) VALUES ('$title', '$link', '$id',$valueOfCountInQuery )"); // makes no sense to use "$valueOfCountInQuery" - maybe you mean "0" (zero)
            mysqli_close($con);
            return 1;
        } catch(Exception $e) {
            return 0;
        }
    } else {
        try {

            // In this situation it looks like you want to update the value in "recent" - I.E. you DID have a record and you want to change it.
            // But think about it for a second - the value of "$valueOfCountInQuery" is the value that you got from "count" on "recent".  You are setting it to the same value that's already in there!

            // ------ SHOW HERE!!!! ------------ //
            mysqli_query($con,"UPDATE recent SET count=$valueOfCountInQuery WHERE sc_stream='$id'"); // redundant

            mysqli_close($con);
            return 2;
        } catch(Exception $e) {
            return 0;            
        }       
    }
}
?>

结合其他人所说的话,看看你所做的事情的逻辑,你似乎有一些基本问题:

我已经调整了一些变量名,以便更清楚地了解您得到了什么,并在代码中添加了描述问题的注释

我忽略了SQL注入问题

<?php

function SQLwriteRecent($id, $title, $link) {

    $con=mysqli_connect("localhost","","","");

    // Check connection
    if (mysqli_connect_errno()) {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    $countQuery = mysqli_query($con,"SELECT count FROM recent WHERE sc_stream='$id'");

    $numberOfRowsReturnedByQuery = mysqli_num_rows($count);

    if ( $numberOfRowsReturnedByQuery > 0 ) {
        $valueOfCountInQuery = $countQuery [0]['count'];
    }

    if( $numberOfRowsReturnedByQuery == 0) {
        try {

            // In this situation it looks like you want to set up a value in "recent" - I.E. you didn't have a record.
            // But think about it for a second - if you had no record in "recent" then how could "$valueOfCountInQuery" possibly be set?

            mysqli_query($con,"INSERT INTO recent (title, link, sc_stream, count) VALUES ('$title', '$link', '$id',$valueOfCountInQuery )"); // makes no sense to use "$valueOfCountInQuery" - maybe you mean "0" (zero)
            mysqli_close($con);
            return 1;
        } catch(Exception $e) {
            return 0;
        }
    } else {
        try {

            // In this situation it looks like you want to update the value in "recent" - I.E. you DID have a record and you want to change it.
            // But think about it for a second - the value of "$valueOfCountInQuery" is the value that you got from "count" on "recent".  You are setting it to the same value that's already in there!

            // ------ SHOW HERE!!!! ------------ //
            mysqli_query($con,"UPDATE recent SET count=$valueOfCountInQuery WHERE sc_stream='$id'"); // redundant

            mysqli_close($con);
            return 2;
        } catch(Exception $e) {
            return 0;            
        }       
    }
}
?>

sc_stream是一个int值还是一个字符串?作为旁白,您应该仔细阅读避免SQL注入-请参阅此处的规范问题:尝试在函数末尾添加一个echo-您是否得到任何输出?我问你,因为你设置了
$count
$count=…
)然后检查
!isset($count)
-在这种情况下,
isset
应始终返回true?(因此应执行
else
部分。此外,是否打开了错误报告(包括通知)。您的错误日志中是否有任何内容。当前脚本的输出是什么?@briosheje:sc_stream是strings sc_stream是int值还是字符串?作为旁白,您应该仔细阅读避免SQL注入-请参见此处的标准问题:尝试在函数末尾添加回显-是否有任何输出?因为您设置了
$count=…
),然后选中
!isset($count)
-在这种情况下
isset
应始终返回true?(因此应执行
else
部分。此外,是否打开了错误报告(包括通知)。您的错误日志中是否有任何内容。当前脚本的输出是什么?@briosheje:sc_stream是一个stringWorks!但是if($numberOfRowsReturnedByQuery>0){$ValueOfCountQuery=$countQuery[0]['count'];}中有一个错误致命错误:当($row=mysqli_fetch_数组($countQuery)){$valueOfcountquery=$row['count'];}Oops时,无法使用类型为mysqli_result的对象作为arraysolved添加的对象。我真的应该在发布示例之前运行它们。很高兴能提供帮助。几乎可以工作!但是if($numberOfcrowsReturnedByQuery>0)中有一个错误{$ValueOfCountQuery=$countQuery[0]['count'];}致命错误:当($row=mysqli_fetch_array($countQuery)){$ValueOfCountQuery=$row['count'];}时,无法将mysqli_result类型的对象作为arraysolved添加到($row=mysqli_fetch_array($countQuery)){$ValueOfCountQuery=$row['count'];}Oops。我真的应该在发布示例。