PHP-MySQL函数
我编写了一个PHP函数,但在特定点上它什么也不做。。我是新来php的,我的英语很差,很抱歉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
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。我真的应该在发布示例。