Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 107,523

HOME > PHP > PHP Forum > รบกวนสอบถามครับคือผมใช้ PHP ทำการ Upload ไฟล์รูปภาพ ลงในฐานข้อมูลลงใน SQL Server แต่อัพโหลดไม่ผ่านคับ





 

รบกวนสอบถามครับคือผมใช้ PHP ทำการ Upload ไฟล์รูปภาพ ลงในฐานข้อมูลลงใน SQL Server แต่อัพโหลดไม่ผ่านคับ

 



Topic : 133561



โพสกระทู้ ( 77 )
บทความ ( 0 )



สถานะออฟไลน์




จากบทความนี้ครับ
https://www.thaicreate.com/free-web-script/php-upload-file-blob-image-sql-mssql-server-2000-2005-2008.html

อันนี้ที่แจ้งเตือนคับ
Database Connected. ERROR INSERT INTO files (Name,FilesType,FilesName) SELECT 'Boss','image/jpeg',
BulkColumn FROM OPENROWSET( Bulk 'C:\Windows\Temp\php9345.tmp', SINGLE_BLOB) AS BLOB

โค้ต
Code (PHP)
<?php 
require_once("../pdo.con.php");

if($_FILES["filUpload"]["name"] != "")
	{

		$strSQL = "INSERT INTO files ";
		$strSQL .="(Name,FilesType,FilesName) ";
		$strSQL .="SELECT '".$_POST["txtName"]."','".$_FILES["filUpload"]["type"]."',  ";
		$strSQL .="BulkColumn FROM OPENROWSET( ";
		$strSQL .=" Bulk '".$_FILES["filUpload"]["tmp_name"]."', SINGLE_BLOB) AS BLOB ";


		$result = $conn->query($strSQL)or die ("ERROR".$strSQL);		

		echo "Copy/Upload Complete<br>";
		
	}




Tag : PHP, Ms SQL Server 2008, Ms SQL Server 2014







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2019-05-04 14:51:49 By : Lun2560 View : 178 Reply : 12
 

 

No. 1



โพสกระทู้ ( 3,442 )
บทความ ( 8 )



สถานะออฟไลน์


https://www.w3schools.com/sql/sql_insert.asp
https://www.thaicreate.com/php/php-mssql-sql-server-add-insert-record.html
https://www.thaicreate.com/community/php-insert-image-mssql.html
ดูว่าเขาเขียนยังไง มันใช่ insert into xxx (...) select ไหม?








ประวัติการแก้ไข
2019-05-04 22:33:37
2019-05-04 22:34:53
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-05-04 22:16:30 By : mr.v
 


 

No. 2



โพสกระทู้ ( 77 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 1 เขียนโดย : mr.v เมื่อวันที่ 2019-05-04 22:16:30
รายละเอียดของการตอบ ::
ผมลองทั้งสองตัวอย่างแล้วคับ error เดียวกัน
ผมก็เขียนตามตัวอย่างนะคับเพียงแต่ผมใช้ pdo ในการเชื่อมต่อคับ การเขียนเพิ่มข้อมูลธรรมดาก็เพิ่มได้ปกติ แต่พออัพโลดรูปไม่ได้ ผมใช้ mssql 2014 คับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-05-04 22:52:56 By : Lun2560
 

 

No. 3



โพสกระทู้ ( 3,442 )
บทความ ( 8 )



สถานะออฟไลน์


เอาโค้ดที่ว่าลองแล้วมาดูครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-05-04 22:57:16 By : mr.v
 


 

No. 4



โพสกระทู้ ( 77 )
บทความ ( 0 )



สถานะออฟไลน์


form
Code (PHP)
<form name="form1" method="post" action="picup2.php" enctype="multipart/form-data" >
  <table width="100" border="1" align="center">
  <tr>
  <td>Upload Picture</td>
  </tr>
  <tr>
  <td><input type="file" name="upfile" ></td>
  </tr>
  <tr>
  <td><input type="submit" name="Submit" value="Submit"></td>
  </tr>
  </table>
  </form>


insert
Code (PHP)
<?php 
//require_once("../pdofw.php");

ini_set('display_errors', 1);
error_reporting(~0);

    $serverName = "PJ60\SQLEXPRESS";
    $userName = "sa";
    $userPassword = "";
    $dbName = "mydatabase";
  
    $conn = new PDO("sqlsrv:server=$serverName ; Database = $dbName", $userName, $userPassword);

	if($conn)
	{
		echo "Database Connected.";
	}
	else
	{
		echo "Database Connected Failed.";
	}
	
	if($_FILES["upfile"]["name"] != "Please Insert Images")
	{
	$FileName = $_FILES['upfile']['tmp_name']; 
	$Name=$_FILES["upfile"]["name"]; 
	$Size=$_FILES["upfile"]["size"]; 
	$Type=$_FILES["upfile"]["type"]; 
	$DataImage = file_get_contents($FileName ); 
	$ArrData = unpack("H*hex", $DataImage); 
	$HexData = "0x".$ArrData['hex']; 



	$sql = "INSERT INTO Images (Img_Name,Img_Size,Img_Data,Img_Type) VALUES ( '$Name','$Size',$HexData,'$Type' )";
	$resule = $conn->query($sql) or die ("ERROR ".$sql);
	
	echo "Upload Complete<br>";
	echo "<a href='picup3.php'>View_img </a> ";
	}
?>


Error คับ
Database Connected.ERROR INSERT INTO Images (Img_Name,Img_Size,Img_Data,Img_Type) VALUES ( '1.jpg','126203',0xffd8ffe000104a46494600010101006000600000ffdb00430001010101010101010101010101010...)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-05-05 13:06:36 By : Lun2560
 


 

No. 5



โพสกระทู้ ( 7,865 )
บทความ ( 1 )



สถานะออฟไลน์


$result = $conn->query($strSQL)or die ("ERROR".$strSQL);

เปลี่ยนเป็น

$result = $conn->query($strSQL)or die ("ERROR".$strSQL.'<br>'. print_r($conn->errorInfo(),true));


https://www.php.net/manual/en/pdo.errorinfo.php

ถ้าเปลี่ยน จากคำสั่ง query ไปใช้ prepare ก็จะดีมาก

ปล.แจ้งเออเร่อร์แค่นั้น มันเห็นแต่ statement ถ้าไม่ชำนาญก็จะไม่รู้ว่าเอ่อเร่อร์อะไร
ก็จะหาลำบาก


ประวัติการแก้ไข
2019-05-05 15:58:32
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-05-05 15:56:59 By : Chaidhanan
 


 

No. 6



โพสกระทู้ ( 77 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 5 เขียนโดย : Chaidhanan เมื่อวันที่ 2019-05-05 15:56:59
รายละเอียดของการตอบ ::
ขอบคุณมากคับ อัพโหลดได้แล้วคับ ตอนนี้ติดเรื่องึดงข้อมูลมาแสดงคับ ขอรบกวนอีกครั้งคับ

showdata.php
Code (PHP)
<?php
require_once("../pdo.con.php");

$sql ="select * from Image_tb ";

$result = $conn->query($sql)or die ("ERROR".$sql.'<br>'. print_r($conn->errorInfo(),true));
?>
<table width="600" border="1" cellpadding="0" cellspacing="0" align="center" >
  <tr> 
    <th width="50"> <div align="center">ID</div></th>
    <th width="50"> <div align="center">Picture</div></th>
    <th width="150"> <div align="center">Name</div></th>
    <th width="150">Type</th>
  </tr>
  <?php
  while($row = $result->fetch(PDO::FETCH_ASSOC)) {
  ?>
  <tr> 
    <td><div align="center" width="50"><?php echo $row['id'];?></div></td>
    <td width="150"><img src="ViewImage.php?id=<?php echo $row["id"];?>"></td>
	<td><div align="center" width="50"><?php echo $row['username'];?></div></td>
    <td><div align="center" width="150"><?php echo $row['type'];?></div></td>
   </tr>
  <?php } ?>
</table>



ViewImage.php
Code (PHP)
   $serverName = "PJ60\SQLEXPRESS";
    $userName = "sa";
    $userPassword = "";
    $dbName = "mydatabase";
  
    $conn = new PDO("sqlsrv:server=$serverName ; Database = $dbName", $userName, $userPassword);

	if($conn)
	{
		echo "Database Connected.";
	}
	else
	{
		echo "Database Connected Failed.";
	}

$sql = "SELECT * FROM Image_tb WHERE id = '".$_GET['id']."' ";
$result = $conn->query($sql)or die ("ERROR".$sql.'<br>'. print_r($conn->errorInfo(),true));
$row = $result->fetch(PDO::FETCH_ASSOC);
header('Content-Type: '.$row['type']);
echo $row['image'];



ส่วนของโค้ต insert data คับ
Code (PHP)
<?php
$db = 'mssql';

$config = array(
/*
    'mysql' => array(
        'dsn'       => 'mysql:host=localhost;dbname=mydatabase',
        'user'      => 'root',
        'password'  => '03112530'
    ),
*/
    'mssql' => array(
        'dsn'       => 'sqlsrv:Server=PJ60\SQLEXPRESS;Database=mydatabase',
        'user'      => 'sa',
        'password'  => 'ua'
    )
);

try {
    $pdocheck = new PDO($config[$db]['dsn'], $config[$db]['user'], $config[$db]['password']);
    $pdocheck->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	
	$result = $pdocheck->prepare(" INSERT INTO Image_tb (username, type, image) VALUES (:username, :type, :image); ");
    $result->bindParam(':username', $_POST['username']);
    $result->bindParam(':type', $_FILES['image']['type']);
    $result->bindParam(':image', file_get_contents($_FILES['image']['tmp_name']), PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY);
    $result->execute();

    $output = $pdocheck->prepare(" SELECT  type, image  FROM Image_tb WHERE username = :username ");
    $output->bindParam(':username',  $_POST['username']);
    $output->execute();
    $output->bindColumn(2, $image, PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY);
    $row = $output->fetch(PDO::FETCH_ASSOC);
    if ($row) {
        // send image back to browser
		header('content-type: '.$row['type']);
        echo $row['image'];
        
    }
}
catch (PDOException $e) {
    echo $e->getMessage();
}


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-05-06 10:47:00 By : Lun2560
 


 

No. 7



โพสกระทู้ ( 77 )
บทความ ( 0 )



สถานะออฟไลน์


ผมพยายามดึงรูปภาพไม่ขึ้นคับมาแต่ข้อความ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-05-06 11:00:50 By : Lun2560
 


 

No. 8



โพสกระทู้ ( 3,442 )
บทความ ( 8 )



สถานะออฟไลน์


วิธีการแสดงภาพที่ผมทดสอบแล้วได้ผลเอามา 3 วิธี อ้างอิงจาก https://stackoverflow.com/questions/4286677/show-image-using-file-get-contents
ให้เลือกเอาวิธีหนึ่ง โดยต้องทบทวนดูตั้งแต่การ insert เลยด้วย.

01
Code (PHP)
$image = 'cats.jpg';


$content = file_get_contents($image);

$imageInfo = getimagesize($image);

header('Content-Type: ' . $imageInfo['mime']);

echo $content;




02
Code (PHP)
$image = 'cats.jpg';


$content = base64_encode(file_get_contents($image));

$imageInfo = getimagesize($image);

header('Content-Type: ' . $imageInfo['mime']);

echo base64_decode($content);




03
Code (PHP)
$image = 'cats.jpg';

$imageInfo = getimagesize($image);

header('Content-Type: ' . $imageInfo['mime']);

readfile($image);




ให้ลองดูจากโค้ดของเขาที่ใช้จะพบว่าดึงเอา mime type จากตัวไฟล์โดยตรงเลย การไปเชื่อ mime type จากกระบวนการอัพโหลดอาจถูกหลอกได้ นี่ยังไม่รวมการเอาข้อมูลจาก $_GET มาใช้เลยโดยไม่กรองอีก มันจะมีช่องโหว่มากทีเดียว

ในส่วนของ function readfile() ตัวนี้จะมีคุณสมบัติไม่ดึงข้อมูลในไฟล์เข้าสู่ memory เหมือน file_get_contents() ซึ่งใช้อ่านไฟล์ใหญ่ๆได้สบายๆ แต่ก็ต้องดูว่าจะใช้ในกระบวนการ insert ได้ไหม?


ประวัติการแก้ไข
2019-05-06 11:15:23
2019-05-06 11:17:58
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-05-06 11:14:46 By : mr.v
 


 

No. 9



โพสกระทู้ ( 77 )
บทความ ( 0 )



สถานะออฟไลน์


ได้แล้วคับผม

Code (PHP)
<?php
$db = 'mssql';

$config = array(
/*
    'mysql' => array(
        'dsn'       => 'mysql:host=localhost;dbname=mydatabase',
        'user'      => 'root',
        'password'  => '03112530'
    ),
*/
    'mssql' => array(
        'dsn'       => 'sqlsrv:Server=PJ60\SQLEXPRESS;Database=mydatabase',
        'user'      => 'sa',
        'password'  => 'ua'
    )
);
try {
    
    $pdocheck = new PDO($config[$db]['dsn'], $config[$db]['user'], $config[$db]['password']);
    $pdocheck->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    
    $output = $pdocheck->prepare(" SELECT type, image FROM Image_tb WHERE id = :id ");
    $output->bindParam(':id',  $_GET['id']);
    $output->execute();
    $output->bindColumn(2, $image, PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY);
    $row = $output->fetch(PDO::FETCH_ASSOC);
    if ($row) {
        
        header('content-type: '.$row['type']);
        echo $row['image'];
    }
}
catch (PDOException $e) {
    echo $e->getMessage();
}


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-05-06 11:27:35 By : Lun2560
 


 

No. 10



โพสกระทู้ ( 77 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 8 เขียนโดย : mr.v เมื่อวันที่ 2019-05-06 11:14:46
รายละเอียดของการตอบ ::
โค้ตข้างต้นผมลองเทสดึงจากเครื่องตัวเองคับยังไม่ได้ลองจาก server จริง คนเดิมที่เขียนไว้เค้า VB สิ่งที่ผมต้องทำคือดึงข้อมูลเฉยๆคับห้ามแก้ไข
ขอบคุณมากคับพี่ๆ ทั้งสองท่าน เดี๋ยวผมจะศึกษาเพิ่มเติมคับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-05-06 11:32:14 By : Lun2560
 


 

No. 11



โพสกระทู้ ( 7,865 )
บทความ ( 1 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 1 เขียนโดย : mr.v เมื่อวันที่ 2019-05-04 22:16:30
รายละเอียดของการตอบ ::
อันนี้ก็เป็น standard statement รูปแบบหนึ่งเพื่อใช้ในการ insert จาก table ที่มีอยู่แล้วครับ
สามารถ join หรืออะไรก็ได้ในรูปแบบการ select โดยทั่วไป มีข้อจำกัดคือ จำนวน field result ที่ได้ต้องเท่ากันกับ ตารางที่จะ insert
และ field type ของข้อมูล ต้องเข้ากันได้

Code (SQL)
insert into tablename ( field1, field2, field3) 
select value1,value2,value3 from tablename where .... ;

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-05-06 13:41:45 By : Chaidhanan
 


 

No. 12



โพสกระทู้ ( 3,442 )
บทความ ( 8 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 11 เขียนโดย : Chaidhanan เมื่อวันที่ 2019-05-06 13:41:45
รายละเอียดของการตอบ ::
ผมไม่เคยเห็น syntax แบบนี้เลยไปลองหามา ก็ส่วนมากมีแต่ตัวอย่างที่ยกมาครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-05-07 19:07:35 By : mr.v
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : รบกวนสอบถามครับคือผมใช้ PHP ทำการ Upload ไฟล์รูปภาพ ลงในฐานข้อมูลลงใน SQL Server แต่อัพโหลดไม่ผ่านคับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: Voake, Comcube, รับทำเว็บไซต์ รับเขียนโปรแกรม

Load balance : Server 03
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2019 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 , 08-9968-0655 อัตราราคา คลิกที่นี่