当前位置: 首页 > 知识库问答 >
问题:

UPDATE和INSERTSQL表与php mysqli->准备[重复]

漆雕嘉茂
2023-03-14

我正在尝试运行两个stmt并将它们与php绑定。当我刚刚运行$stmt并删除所有$stmt2时,它工作得很好。我试图将“活动”列更改为零。基本上试图搜索和更新用户上传的所有其他图片并将其更改为零(因此它不是个人资料图片),只有最近的一张应该是活动的($active中的1)。

 if (!$mysqli) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
echo $db;
exit;
}

try {

if (empty($_FILES['image'])) {
    throw new Exception('Image file is missing');
}

$image = $_FILES['image'];

// check INI error
if ($image['error'] !== 0) {
    if ($image['error'] === 1) 
        throw new Exception('Max upload size exceeded');

    throw new Exception('Image uploading error: INI Error');
}

// check if the file exists
if (!file_exists($image['tmp_name']))
    throw new Exception('Image file is missing in the server');

$maxFileSize = 2 * 10e6; // in bytes
if ($image['size'] > $maxFileSize)
    throw new Exception('Max size limit exceeded'); 

// check if uploaded file is an image
$imageData = getimagesize($image['tmp_name']);
if (!$imageData) 
    throw new Exception('Invalid image');

$mimeType = $imageData['mime'];

// validate mime type
$allowedMimeTypes = ['image/jpeg', 'image/png', 'image/gif'];
if (!in_array($mimeType, $allowedMimeTypes)) 
    throw new Exception('Only JPEG, PNG and GIFs are allowed');

// nice! it's a valid image

// get file extension (ex: jpg, png) not (.jpg)
$fileExtention = strtolower(pathinfo($image['name'] ,PATHINFO_EXTENSION));

// create random name for your image
$fileName = round(microtime(true)) . mt_rand() . '.' . $fileExtention; // anyfilename.jpg

// Create the path starting from DOCUMENT ROOT of your website
$path = '/php/image_upload/images/' . $fileName;

// file path in the computer - where to save it 
$destination = $_SERVER['DOCUMENT_ROOT'] . $path;

if (move_uploaded_file($image['tmp_name'], $destination)) {
    // create the url
    $protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === true ? 'https://' : 'http://';
    $domain = $protocol . $_SERVER['SERVER_NAME'];
    $url = $domain . $path;
    $active = 1;

    $mysqli->autocommit(FALSE);
    $stmt2 = $mysqli->prepare('UPDATE image_uploads SET active = ? WHERE user_id = ?');
    $stmt = $mysqli -> prepare('INSERT INTO image_uploads (url, active, user_id) VALUES (?, ?, ?)');
    if (
        $stmt &&
        $stmt2 &&
        $stmt2 -> bind_param('ii', 0, $_SESSION['id']) &&
        $stmt -> bind_param('sii', $url, $_SESSION['id'], $active) &&
        $stmt2 -> execute() &&
        $stmt -> execute()
    ) {
        exit(
            json_encode(
                array(
                    'status' => true,
                    'url' => $url

                )
            )
        );
    } else {
        throw new Exception('Error in saving into the database');
    }

}


 } catch (Exception $e) {

exit(json_encode(
    array (
        'status' => false,
        'error' => $e -> getMessage()
    )
));

}

共有1个答案

武元白
2023-03-14

你可能忘了关闭这里

} else 
    throw new Exception('Error in saving into the database');

应该是

} else 
    throw new Exception('Error in saving into the database');
}

更新:

我没有注意到你更新了代码。

问题在这行:< code > $ maxFileSize = 2 * 10e6

应该是$maxFile大小=2*1024;

 类似资料:
  • 问题内容: 嗨,我正在尝试学习使用准备好的语句来避免SQL注入等的正确方法。 当我执行脚本时,我从脚本中收到一条消息,提示已插入0行,我希望这表示已插入1行,并且当然会更新表。我不完全确定自己准备好的陈述,因为我已经做过一些研究,我的意思是每个例子都各不相同。 更新表格时,我需要声明所有字段吗?还是只更新一个字段就可以了? 任何信息将非常有帮助。 index.php classes / class

  • 可能重复: dbcp中的已准备语句池 我正在构建一个Web应用程序,它使用Tomcat的数据库连池机制进行内部使用。我试图汇集准备好的语句,以便应用程序在检索数据时更有效。 据我所知,当连接、结果集和语句关闭时,连接将返回到池。如果设置了适当的标志,放弃的连接也会关闭并返回到池中。关闭连接意味着释放所有数据库游标和缓存的语句,包括准备好的语句。那么准备好的语句池有什么意义呢?

  • 3. 登录与准备 3.1. 浏览器及网络要求 在课堂开始前,需先检查浏览器及网络配置是否符合要求,如下: 浏览器要求 谷歌Chrome浏览器,版本V55.0及以上。 网络环境要求 上行带宽达到 2Mbps 或以上,测速工具:http://www.speedtest.net 3.2. 登录课堂 打开管理后台提供的课堂地址,输入昵称和密码登录课堂。 昵称 可自定义名称,名称将会在视频窗口及聊天中显示。

  • 在正式使用Yearning前,你需要先设置如下setup(请务必花几分钟时间阅读!)。 创建用户并确认其角色 创建权限组并将权限组赋予给对应的用户 添加数据源信息 为数据源创建自定义审核规则 在设置页面配置各项配置信息 根据需求调整自定义审核规则 创建用户并确认其角色 创建用户 在Yearning中用户可以通过以下方式创建: 在 管理->用户 页面admin用户自行创建用户。 打开 管理->设置

  • 学习AngularJS的一个好方法是逐步完成本教程,它将引导您构建一个完整的AngularJS web应用程序。 该web应用是一个Android设备清单的目录列表,您可以筛选列表以便查看您感兴趣的设备,然后查看设备的详细信息。 本教程将向您展示AngularJS怎样使得web应用更智能更灵活,而且不需要各种扩展程序或插件。 通过本教程的学习,您将: 阅读示例学习怎样使用AngularJS的客户端

  • 问题内容: 引用MySQL INSERT手册-UPDATE也一样: 使用关键字DEFAULT可以将列明确设置为其默认值。这使编写INSERT语句(为少数几个列分配值)更加容易,因为它使您避免编写不完整的VALUES列表,该列表不包含表中每个列的值。否则,您将不得不写出与VALUES列表中的每个值相对应的列名列表。 简而言之,如果我写 插入新的一列,并将column2设置为其默认值(无论它是多少)。