Saklı yordam: PHP geçti Değişken sorgu dizesi ikinci yarısını değiştirir

1 Cevap php

Temelde, ben PHP dönüştürme değilim şu an bir ASP web sitesi var. Biz hala DB için MSSQL sunucusu kullanarak konum - hareket etmiyor.

ASP, şimdi, idam edilecek dev bir sql sorgusu ile bir içerme dosyası var. Bu içeren sayfaları çok oturur ve bu ne basit bir sürümüdür. Sayfalar A, B ve C bu bir listesini döndürmek için dosya içerir kullanın.

ASP, Sayfa A Değişken A geçer dosyasını dahil - sayfa B Değişken B geçer - sayfa C böylece değişken C geçer, ve.

Içeren dosya bu gibi SQL sorgusu oluşturur:

sql = "SELECT * from table_one LEFT OUTER JOIN table_two ON table_one.id = table_two.id"

sonra, ana sayfasından geçti değişkeni dayalı, (ASP hatırlıyorum) ekler

Select Case sType
Case "A"
sql = sql & "WHERE LOWER(column_a) <> 'no' AND LTRIM(ISNULL(column_b),'') <> '' ORDER BY column_a
Case "B"
sql = sql & "WHERE LOWER(column_c) <> 'no' ORDER BY lastname, firstname
Case "C"
sql = sql & "WHERE LOWER(column_f) <> 'no' OR LOWER(column_g) <> 'no' ORDER BY column_g

Fark olarak, sql sorgunun ikinci bölümü olarak eklenen her dizesi önceki farklıdır; bir değişken değil, sadece beni şaşkına ne olduğunu, dışarı ikame edilebilir.

Nasıl ben PHP ile saklı yordam geçmek varchar girişine göre, saklı yordam içine bu durumda / anahtarı çevirmek?

Bu saklı yordam, aslında yaklaşık 20 sayfa listeleyen bir sorgu idare edecek, bu yüzden ağır bir tane var ve bu benim ilk büyük karmaşık bir sorundur. Ama orada da alıyorum! Ben de de MySQL için sadece daha alışkınım. Onlar farklı konum değil. : P

Şimdiden yardımlarınız için çok teşekkür ederim.

Stephanie

1 Cevap

Nasıl ben PHP ile saklı yordam geçmek varchar girişine göre, saklı yordam içine bu durumda / anahtarı çevirmek?

SQL Server, CASE expression not kontrolü, akış IF / ELSE gibi içindir.

Kullanın:

DECLARE @SQL NVARCHAR(max)
    SET @SQL = N'SELECT ...'

    SET @SQL = @SQL + CASE sType
                        WHEN 'A' THEN ' WHERE ... '
                        WHEN 'B' THEN ' WHERE ... '
                        WHEN 'C' THEN ' WHERE ... '
                        ELSE ' '
                      END
BEGIN

  EXEC sp_executesql @SQL

END

Unutmayalım ki ominous tale of Little Bobby Tables, okumak için en iyi The curse and blessings of Dynamic SQL.