2016-09-14 5 views
1

잠시 동안 답변을 검색했지만 아무 것도 찾을 수없는 것 같습니다.mysqli_bind_param 준비 문을 사용하여 혼합 문자열을 삽입하는 방법

저는 테이블에 행을 삽입하기 위해 mysqli_bind_param을 사용하는 방법을 찾고 있는데, 여기서 param (?)은 더 큰 문자열의 일부입니다. 이 내 코드입니다 : 임 행에 "$ product_editPrice_was"와 "$ product_editPrice_now"를 추가하는 방법을 찾고

$query = "INSERT INTO CDBusers_activity (order_ID, activity_text_desc) VALUES (?, 'Price edited from ? to ?')"; 
$stmt = mysqli_prepare($DB_conn, $query); 
mysqli_bind_param($stmt, "sss", $orderID, $product_editPrice_was, $product_editPrice_now); 
mysqli_stmt_execute($stmt); 

.

나는 문자열을 만들 수 있습니다

$text = "Price edited from $product_editPrice_was to $product_editPrice_now" 

및 그 결합,하지만 난 간단한 방법이 있는지 관심이 있어요? 예 :

$query = "INSERT INTO CDBusers_activity (order_ID, activity_text_desc) VALUES (?, 'Price edited from ' ? ' to ' ?)"; 

감사합니다.

+1

'price_before','price_after' 두 개의 필드를 만들고 그 필드에 삽입하십시오. –

+0

감사합니다. @u_mulder하지만 activity_text_desc 필드는 다른 활동 (예 : "사용자 삭제 xyz", 다른 코드에서 처리됨)에 사용됩니다. 한 번에 하나 이상의 변수를 필드에 바인딩하는 전체 솔루션을 찾고 있습니다. –

+0

그러면 답은 __NO__입니다. 삽입 된 데이터의 일부로 palceholders를 사용할 수 없습니다. –

답변

1

기본 질문을합니다. 아니요, 삽입 된 값의 일부를 자리 표시 자로 바꿀 수 없습니다.

솔루션은 다음과 같습니다

$query = "INSERT INTO CDBusers_activity (order_ID, activity_text_desc) VALUES (?, ?)"; 
$stmt = mysqli_prepare($DB_conn, $query); 
$text = "Price edited from $product_editPrice_was to $product_editPrice_now"; 
mysqli_bind_param($stmt, "ss", $orderID, $text); 
mysqli_stmt_execute($stmt); 

또 다른 해결책은 price_before, price_after 같은 다른 분야로 만드는 것입니다.

그러나 당신이 그것을 할 수없는 경우, 당신은 MySQL의 CONCAT() 및 예를 들어 자리 표시자를 사용하여 시도 할 수 있지만 작동하는지 잘 모르겠어요 :

INSERT INTO CDBusers_activity (order_ID, activity_text_desc) VALUES (?, CONCAT('Price edited from ', ?, ' to ', ?) 
1

을하지만,이 경우 내가 관심 더 쉬운 방법?

이것은 흥미로운 질문입니다. 방법으로.

$text = "Price edited from $product_editPrice_was to $product_editPrice_now"; 

은 분명히 텍스트 문자열을 만드는 가장 쉬운 방법입니다. 이 텍스트 문자열은 자리 표시자를 사용하여 일반적인 방식으로 쿼리에 바인딩 할 수 있습니다. 게다가 SQL과 데이터를 서로 분리하여 코드를 더 잘 구성하는 데 도움이됩니다.

그래서 나는 더 단순하게해서는 안되는 것들이 있다고 생각합니다. 그러한 시도는 상황을 더욱 복잡하게 만들 가능성이 있기 때문입니다.