如何解决mysqli_fetch_array()要求参数1是mysqli_result,php中的字符串
我是新来的如何解决mysqli_fetch_array()要求参数1是mysqli_result,php中的字符串,php,mysqli,Php,Mysqli,我是新来的php,我一直在通过给定一个特定的id来查找max(id) 在活动A中,有一个列表视图。当列表检测长按时,它将检查id是否为max id。如果是,它将被删除,如果不是,它将显示“无法删除列表” 这就是我尝试过的 listViewUpdate.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { public boolean onItemLongClick(fi
php
,我一直在通过给定一个特定的id来查找max(id)
在活动A中,有一个列表视图
。当列表检测长按时,它将检查id
是否为max id
。如果是,它将被删除,如果不是,它将显示“无法删除列表”
这就是我尝试过的
listViewUpdate.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
public boolean onItemLongClick(final AdapterView<?> p, View v, final int po, long id) {
iD = details1.get(po).getID();
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Delete");
builder.setMessage("Are you sure you want to delete?");
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int ii) {
checkMaxID(ID,iD); // ID is foreign key
// delete(iD);
objadapter.removeItem(po);
}
});
public void checkMaxID(final int foreignKey,final String iD)
{
class check extends AsyncTask<Void,Void,String>{
// ProgressDialog loading;
@Override
protected void onPreExecute() {
super.onPreExecute();
// loading = ProgressDialog.show(Edit_Staff.this,"Updating...","Wait...",false,false);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
// loading.dismiss();
Toast.makeText(getActivity(), s, Toast.LENGTH_LONG).show();
}
@Override
protected String doInBackground(Void... params) {
HashMap<String,String> hashMap = new HashMap<>();
hashMap.put(Configs.KEY_ID, iD);
hashMap.put(Configs.KEY_TWD, String.valueOf(foreignKey));
RequestHandler rh = new RequestHandler();
String s = rh.sendPostRequest(Configs.URL_CHECK_ID, hashMap);
return s;
}
}
check ue = new check();
ue.execute();
}
listViewUpdate.setOnItemLongClickListener(新的AdapterView.OnItemLongClickListener(){
长点击(最终适配器视图p、视图v、最终整数po、长id){
iD=details1.get(po.getID();
AlertDialog.Builder=新建AlertDialog.Builder(getActivity());
建造商名称(“删除”);
setMessage(“您确定要删除吗?”);
builder.setIcon(android.R.drawable.ic\u对话框\u警报);
builder.setPositiveButton(“是”,新建DialogInterface.OnClickListener(){
公共void onClick(对话框接口对话框,int ii){
checkMaxID(ID,ID);//ID是外键
//删除(iD);
对象自适应删除项(po);
}
});
public void checkMaxID(最终int foreignKey,最终字符串iD)
{
类检查扩展了异步任务{
//对话加载;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//加载=ProgressDialog.show(编辑人员,这是“更新…”,“等待…”,false,false);
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
//loading.dispose();
Toast.makeText(getActivity(),s,Toast.LENGTH_LONG).show();
}
@凌驾
受保护字符串doInBackground(无效…参数){
HashMap HashMap=新的HashMap();
hashMap.put(Configs.KEY\u ID,ID);
hashMap.put(Configs.KEY_TWD,String.valueOf(foreignKey));
RequestHandler rh=新的RequestHandler();
字符串s=rh.sendpostrest(配置s.URL\u CHECK\u ID,hashMap);
返回s;
}
}
检查ue=新检查();
ue.execute();
}
checkID.php
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
//Getting values
$id = $_GET['id'];
$foreignKey = $_GET['twd'];
//Creating an sql query
$sql = "SELECT MAX(id) FROM work_details WHERE twd = '$foreignKey'";
$row = mysqli_fetch_row($sql);
$maxId=$row[0];
//Importing our db connection script
require_once('dbConnect.php');
//Executing query to database
if($id==$maxId){
$sql = "DELETE FROM work_details WHERE id=$id;";
}else{
echo 'list cannot be deleted';
}
//Closing the database
mysqli_close($con);
}
?>
错误会自我解释并告诉您错误所在。无论如何,这里有一个提示:mysqli\u fetch\u row()
不接受SQL字符串(查询)作为参数。相反,它接受执行此查询时来自DB的结果,并从该结果中提取一行(单个条目)
简而言之:
您应该声明SQL查询(您已经声明了)
您应该执行查询(这是您缺少的部分)
您应该逐行从查询结果中获取结果(这是您在步骤2中混合的部分)
不要只是随机编码。试着理解你在编码什么以及引擎盖下发生了什么(至少在小范围内)
下面是一个很好且非常简单的示例,与您的代码类似。您可以签出示例代码片段:
这里有一个替代的、非常好的面向对象PHP模块,您可以使用它与DB进行交互:在这段代码中,您没有执行查询,因此无法获取
尝试以下方法:
<?php
if(isset($_GET['id'], $_GET['twd'])){
/*Importing our db connection script*/
require_once('dbConnect.php');
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$sql = sprintf("SELECT MAX(id) as MaxId FROM work_details WHERE twd = '%s'",
mysqli_real_escape_string($_GET['twd']));
if ($result = mysqli_query($con, $sql)) {
/* fetch associative array */
if ($row = mysqli_fetch_row($result)) {
if($row[0] === $_GET['id']){
$sql = sprintf("DELETE FROM work_details WHERE id='%s';",
mysqli_real_escape_string($_GET['id']));
if ($result = mysqli_query($con, $sql)) {
echo 'success';
}else{
echo 'failed';
}
}
}
/* free result set */
mysqli_free_result($result);
}
/* close connection */
mysqli_close($con);
}
?>
该错误消息是自定义的吗?请提供更多详细信息,因为我们无法帮助您处理如此稀少的错误信息。@MikeM.很抱歉,我没有从上一篇文章中得到答案..请帮帮我..谢谢你..我从早上到现在一直困在这里!@Milkncookiez我编辑了我的post@John,我回答谢谢你的回答…我已经浏览了你提供的链接,但是我仍然不知道如何解决第二个问题。。。