使用xamarin.forms中的php脚本在mysql数据库中保存图像

使用xamarin.forms中的php脚本在mysql数据库中保存图像,php,android,mysql,mysqli,xamarin.forms,Php,Android,Mysql,Mysqli,Xamarin.forms,我正在尝试使用PHPWebservice和json将xamarin.Forms代码中的图像保存到mysql数据库中 运行php脚本时出现以下错误 <?php $conn = mysqli_connect('localhost', 'username', 'password', 'dbname'); if($_SERVER['REQUEST_METHOD'] == "POST"){ $id = isset($_POST['id']) ? $_POST['id'] : "";

我正在尝试使用PHPWebservice和json将xamarin.Forms代码中的图像保存到mysql数据库中

运行php脚本时出现以下错误

<?php
$conn = mysqli_connect('localhost', 'username', 'password', 'dbname');

if($_SERVER['REQUEST_METHOD'] == "POST"){
    $id = isset($_POST['id']) ? $_POST['id'] : "";
    $image = isset($_POST['image']) ? $_POST['image'] : ""; 

    if(!$image==null)
    {
        $sql = "UPDATE tbl_image SET Image = ? WHERE id=$id";

        $stmt = mysqli_prepare($con, $sql);
        mysqli_stmt_bind_param($stmt, "s", $image);
        mysqli_stmt_execute($stmt);

        $check = mysqli_stmt_affected_rows($stmt);
        if($check==1)
            $json=array("status" => 1, "msg" => "Image updates successfully");
            else
            $json=array("status" => 0, "msg" => "error happend while updating image to server.");
    }
    else
        $json=array("status" => 0, "msg" => "Image not uploaded");  
}else{
    $json = array("status" => 0, "msg" => "Request Not Accepted.");
}
@mysqli_close($conn);

/* Output header */
header('Content-type: application/json');
echo json_encode($json);
?>
var bytes = default(byte[]);
using (var StreamReader = new StreamReader(imgFile))
{
    using (var mstream = new MemoryStream())
    {
        StreamReader.BaseStream.CopyTo(mstream);
        bytes = mstream.ToArray();
    }
}
string imgstr = Convert.ToBase64String(bytes);

using (var client = new HttpClient())
{
    var url = "url";
    var content = new FormUrlEncodedContent(new[] {
    new KeyValuePair<string,string>("id", id.ToString()),
    new KeyValuePair<string, string>("image", imgstr)
});

    var resp = await client.PostAsync(new Uri(url), content);
    if (!resp.IsSuccessStatusCode)
        General.GSErr("Nothing retrieved from server.");
    else
    {
        var result = JsonConvert.DeserializeObject<General_Response>(resp.Content.ReadAsStringAsync().Result);
        if (result.status == 0)
            General.GSErr(result.msg);
    }
}
** [20-Dec-2016 00:17:08]PHP警告:mysqli_prepare期望参数1为mysqli,在第13行的/home7/gsakolac/public_html/BBA/prod_update_image.PHP中给出空值 [20-Dec-2016 00:17:08]PHP警告:mysqli_stmt_bind_param希望参数1为mysqli_stmt,在第14行的/home7/gsakolac/public_html/BBA/prod_update_image.PHP中给出空值 [20-Dec-2016 00:17:08]PHP警告:mysqli_stmt_execute希望参数1为mysqli_stmt,在第15行的/home7/gsakolac/public_html/BBA/prod_update_image.PHP中给出空值 [20-Dec-2016 00:17:08]PHP警告:mysqli_stmt_受影响的_行希望参数1为mysqli_stmt,在第17行的/home7/gsakolac/public_html/BBA/prod_update_image.PHP中给出空值 **

我的php脚本

<?php
$conn = mysqli_connect('localhost', 'username', 'password', 'dbname');

if($_SERVER['REQUEST_METHOD'] == "POST"){
    $id = isset($_POST['id']) ? $_POST['id'] : "";
    $image = isset($_POST['image']) ? $_POST['image'] : ""; 

    if(!$image==null)
    {
        $sql = "UPDATE tbl_image SET Image = ? WHERE id=$id";

        $stmt = mysqli_prepare($con, $sql);
        mysqli_stmt_bind_param($stmt, "s", $image);
        mysqli_stmt_execute($stmt);

        $check = mysqli_stmt_affected_rows($stmt);
        if($check==1)
            $json=array("status" => 1, "msg" => "Image updates successfully");
            else
            $json=array("status" => 0, "msg" => "error happend while updating image to server.");
    }
    else
        $json=array("status" => 0, "msg" => "Image not uploaded");  
}else{
    $json = array("status" => 0, "msg" => "Request Not Accepted.");
}
@mysqli_close($conn);

/* Output header */
header('Content-type: application/json');
echo json_encode($json);
?>
var bytes = default(byte[]);
using (var StreamReader = new StreamReader(imgFile))
{
    using (var mstream = new MemoryStream())
    {
        StreamReader.BaseStream.CopyTo(mstream);
        bytes = mstream.ToArray();
    }
}
string imgstr = Convert.ToBase64String(bytes);

using (var client = new HttpClient())
{
    var url = "url";
    var content = new FormUrlEncodedContent(new[] {
    new KeyValuePair<string,string>("id", id.ToString()),
    new KeyValuePair<string, string>("image", imgstr)
});

    var resp = await client.PostAsync(new Uri(url), content);
    if (!resp.IsSuccessStatusCode)
        General.GSErr("Nothing retrieved from server.");
    else
    {
        var result = JsonConvert.DeserializeObject<General_Response>(resp.Content.ReadAsStringAsync().Result);
        if (result.status == 0)
            General.GSErr(result.msg);
    }
}
我的xamarin.forms代码,用于将图像文件imgFile Name string转换为base64string并调用php脚本

<?php
$conn = mysqli_connect('localhost', 'username', 'password', 'dbname');

if($_SERVER['REQUEST_METHOD'] == "POST"){
    $id = isset($_POST['id']) ? $_POST['id'] : "";
    $image = isset($_POST['image']) ? $_POST['image'] : ""; 

    if(!$image==null)
    {
        $sql = "UPDATE tbl_image SET Image = ? WHERE id=$id";

        $stmt = mysqli_prepare($con, $sql);
        mysqli_stmt_bind_param($stmt, "s", $image);
        mysqli_stmt_execute($stmt);

        $check = mysqli_stmt_affected_rows($stmt);
        if($check==1)
            $json=array("status" => 1, "msg" => "Image updates successfully");
            else
            $json=array("status" => 0, "msg" => "error happend while updating image to server.");
    }
    else
        $json=array("status" => 0, "msg" => "Image not uploaded");  
}else{
    $json = array("status" => 0, "msg" => "Request Not Accepted.");
}
@mysqli_close($conn);

/* Output header */
header('Content-type: application/json');
echo json_encode($json);
?>
var bytes = default(byte[]);
using (var StreamReader = new StreamReader(imgFile))
{
    using (var mstream = new MemoryStream())
    {
        StreamReader.BaseStream.CopyTo(mstream);
        bytes = mstream.ToArray();
    }
}
string imgstr = Convert.ToBase64String(bytes);

using (var client = new HttpClient())
{
    var url = "url";
    var content = new FormUrlEncodedContent(new[] {
    new KeyValuePair<string,string>("id", id.ToString()),
    new KeyValuePair<string, string>("image", imgstr)
});

    var resp = await client.PostAsync(new Uri(url), content);
    if (!resp.IsSuccessStatusCode)
        General.GSErr("Nothing retrieved from server.");
    else
    {
        var result = JsonConvert.DeserializeObject<General_Response>(resp.Content.ReadAsStringAsync().Result);
        if (result.status == 0)
            General.GSErr(result.msg);
    }
}
我是php编程新手,请帮助我


Amit Saraf

因为您的第一个参数是$con,应该是$conn

不要将变量直接绑定到查询。您已经在使用准备好的语句,请使用它

$sql = "UPDATE tbl_image SET Image = ? WHERE id = ?";

$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, "si", $image, $id);

应用程序的错误报告级别不足。您需要重新阅读有关mysqli prepared StatementHanks的书。愚蠢的错误。感谢您指出。使用MySQL Workbench查看数据时,查看器不会显示图像,而只显示文本。有什么问题吗?我正在尝试将图像文件保存到mysql BLOBfield@YourCommonSense-行!谢谢你指出这一点!