此问题已经在这里有了答案:
我想使用$ SQLStatement在数据表中插入文本,对此主题我不太了解,但是我搜索了很多信息。我用$ SQLStatement插入了一张照片的照片到数据库中的一个文件夹中,然后看到了这张照片,但是现在我只能用文本来做同样的事情了。数据库,不做路由。因此,我的问题是我无法使用插入照片路线的相同方法来插入文本。因为这里的问题是我有照片和照片名称。照片的路线正确插入,但带有文字的我不知道是谁一起做的,不是分开的。
这里是放置数据的公式:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" href="lib/css/bootstrap.min.css">
<title>Subir Imagen</title>
</head>
<?php
/*Incluyendo la conexion y enviando el Arreglo Files a la funcion*/
include 'MOST.coneccion.php';
if(isset($_POST['save']))
{
$DBImagen->uploadImage($_FILES);
}
?>
<body style="padding-top:80px;">
<div class="container col-lg-6 col-lg-offset-3">
<div class="panel panel-default">
<div class="panel-heading" style="background-color:#81BEF7;">
<div class="panel-title">
<center><h3>Guardar Imagen con PHP</h3></center>
</div>
</div>
<div class="panel-body">
<form method="post" enctype="multipart/form-data">
<div>
<input name="price" placeholder="Price">
</div>
<div>
<input name="name" placeholder="Name of the ph">
</div>
<div class="form-group">
<input type="file" name="imagen">
</div>
<input type="submit" name="save" class="btn btn-primary">
</form>
<br>
<table class="table">
<tr>
<th>#</th>
<th>Imagen</th>
</tr>
</table>
</div>
</div>
</div>
Ejecutar
这里带有$ SQLStatement的函数:
<?php
class DBImagen
{
private $DBConexion;
function __construct($Conexion)
{
$this->DBConexion = $Conexion;
}
/**********************************
to save the picture, i don't know if I need to do the same for the text
**********************************/
public function uploadImage($Imagen)
{
$ruta = 'imagenes2/'.$Imagen['imagen']['name'];
move_uploaded_file($Imagen['imagen']['tmp_name'],$ruta);
$SQLStatement = $this->DBConexion->prepare("INSERT INTO productosima (imagen) VALUES (:url)");
$SQLStatement->bindParam(":url",$ruta);
$SQLStatement->execute();
}
我打开了一个新的主意,感谢您的帮助,您使这个社区变得更好。
一些一般性建议。使用某种数据库抽象层类型的sql库。我用adodb举例。我不想重写我的所有代码,只是因为提供者更改了数据库等。确保必须根据acc调整路径。您的环境。
<?php
$LW = substr($_SERVER['SCRIPT_FILENAME'], 0, 1); // i run this thing on
// windows so i need a
// drive letter for
// sqlite
include_once $LW . ':/WAMP64/www/adodb5/adodb.inc.php';
include_once $LW . ':/WAMP64/www/adodb5/adodb-pager.inc.php';
include_once $LW . ':/WAMP64/www/adodb5/toexport.inc.php';
include_once $LW . ':/WAMP64/www/adodb5/tohtml.inc.php';
include_once $LW . ':/WAMP64/www/adodb5/rsfilter.inc.php';
现在已经安装了东西。现在,我们必须定义连接器-我使用sqlite-在您的情况下,可能需要密码等。该文件应包含在无法通过网络访问的文件中。就我而言,它很简单,对我来说只是一个Intranet工具,因此就足够了。您必须阅读有关数据库类型的ADODB手册。 SQLITE没有用户,也没有密码(在我的情况下),因此此字段设置为false。 ADODB CONNECT manual
$db = null;
$db = newAdoConnection("sqlite3");
$db->connect($init->dbfile, null, null, null);
现在连接器知道sqlite文件在哪里以及如何处理这种类型的数据库。这是唯一取决于数据库引擎的东西。请参阅数据库的adodb文档。现在我们准备生成一个sql字符串。有很多方法可以将文本字符串传输到您的php脚本中。经典的POST和GET全局变量,一些会话内容。我们在这里保持简单。
$txt=$_POST["txt"];
一个完全不好的主意是,传输完整的SQL字符串-最大的恐怖情况就是为此也使用$ _GET。不要 !!! (然后每个人都可以仅从浏览器位置字段中启动SQl命令...)我们生成SQL语句HARDCODED!因此,不可能从外部进行更改。检查文本中的“有趣”字符也可能是一个主意。或者,如果文本很长,等等。
$sql="INSERT INTO artists (name) VALUES($txt);
现在我们把东西放起来
$db->execute($sql);
就是这样。
它适用于所有数据库和连接器。语法略有不同,但基本内容相同。
甚至,即使我使用sqlite,也可以使用所需的任何数据库。 ADODB唯一更改的是连接器的设置。可以很好地包括在内。因此,如果您以后想要更改数据库,只需更改包含连接器设置的包含文件即可。ADODB还具有其他一些技巧。值得在那里读一点。
玩得开心!
您可以使用$ _POST超全局变量来捕获表单的值:
$price = $_POST['price'];
$name = $_POST['name'];
然后使用它们来准备SQL STATEMENT:
public function uploadImage($Imagen)
{
$ruta = 'imagenes2/'.$Imagen['imagen']['name'];
move_uploaded_file($Imagen['imagen']['tmp_name'],$ruta);
$SQLStatement = $this->DBConexion->prepare("INSERT INTO productosima (imagen,precio,nombre) VALUES (?,?,?)");
$SQLStatement->bind_param('sds', $ruta,$price,$name);
$SQLStatement->execute();
}
请注意:该参数可能是以下四种类型之一:i-整数d-双精度s-字符串b-BLOB
查看此答案以获取更多说明:Binding multiple values in pdo